<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <!-- hexo-inject:begin --><!-- hexo-inject:end --><meta charset="UTF-8">
<meta name="viewport" content="width=device-width">
<meta name="theme-color" content="#222" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="#222" media="(prefers-color-scheme: dark)"><meta name="generator" content="Hexo 5.4.2">

  <link rel="apple-touch-icon" sizes="180x180" href="https://static.xiaosige.com/img/favicon.png">
  <link rel="icon" type="image/png" sizes="32x32" href="https://static.xiaosige.com/img/favicon.png">
  <link rel="icon" type="image/png" sizes="16x16" href="https://static.xiaosige.com/img/favicon.png">
  <link rel="mask-icon" href="https://static.xiaosige.com/img/favicon.png" color="#222">
  <meta name="baidu-site-verification" content="WZilU4QiSZ">

<link rel="stylesheet" href="/css/main.css">



<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5.15.1/css/all.min.css">
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/animate.css@3.1.1/animate.min.css" integrity="sha256-PR7ttpcvz8qrF57fur/yAx1qXMFJeJFiA6pSzWi0OIE=" crossorigin="anonymous">
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fancyapps/ui@5.0.31/dist/fancybox/fancybox.css" integrity="sha256-gkQVf8UKZgQ0HyuxL/VnacadJ+D2Kox2TCEBuNQg5+w=" crossorigin="anonymous">

<script class="next-config" data-name="main" type="application/json">{"hostname":"www.xiaosige.com","root":"/","images":"/images","scheme":"Gemini","darkmode":true,"version":"8.26.0","exturl":false,"sidebar":{"position":"left","width_expanded":320,"width_dual_column":240,"display":"post","padding":18,"offset":12},"hljswrap":false,"codeblock":{"theme":{"light":"atom-one-dark-reasonable","dark":"atom-one-dark-reasonable"},"prism":{"light":"prism-tomorrow","dark":"prism-tomorrow"},"copy_button":{"enable":true,"style":"mac"},"fold":{"enable":false,"height":500},"language":false},"bookmark":{"enable":false,"color":"#222","save":"auto"},"mediumzoom":false,"lazyload":true,"pangu":false,"comments":{"style":"tabs","active":"changyan","storage":true,"lazyload":true,"nav":null,"activeClass":"changyan"},"stickytabs":false,"motion":{"enable":true,"async":false,"duration":200,"transition":{"menu_item":"fadeInDown","post_block":"fadeIn","post_header":"fadeInDown","post_body":"fadeInDown","coll_header":"fadeInLeft","sidebar":"fadeInUp"}},"prism":false,"i18n":{"placeholder":"搜索...","empty":"没有找到任何搜索结果：${query}","hits_time":"找到 ${hits} 个搜索结果（用时 ${time} 毫秒）","hits":"找到 ${hits} 个搜索结果"},"path":"/search.xml","localsearch":{"enable":true,"top_n_per_article":1,"unescape":false,"preload":true,"trigger":"auto"}}</script><script src="/js/config.js" defer></script>

    <meta name="description" content="该文章已加密, 请输入密码查看。">
<meta property="og:type" content="website">
<meta property="og:title" content="收藏">
<meta property="og:url" content="https://www.xiaosige.com/welfare/index.html">
<meta property="og:site_name" content="小四儿">
<meta property="og:description" content="该文章已加密, 请输入密码查看。">
<meta property="og:locale" content="zh_CN">
<meta property="article:published_time" content="2019-08-31T07:55:53.000Z">
<meta property="article:modified_time" content="2023-10-01T09:41:58.729Z">
<meta property="article:author" content="leeze">
<meta property="article:tag" content="小四儿 leeze">
<meta name="twitter:card" content="summary">


<link rel="canonical" href="https://www.xiaosige.com/welfare/">


<script class="next-config" data-name="page" type="application/json">{"sidebar":"","isHome":false,"isPost":false,"lang":"zh-CN","comments":true,"permalink":"https://www.xiaosige.com/welfare/index.html","path":"welfare/index.html","title":"收藏"}</script>

<script class="next-config" data-name="calendar" type="application/json">""</script>
<title>收藏 | 小四儿
</title>
  

  <script src="/js/third-party/analytics/baidu-analytics.js" defer></script>
  <script async src="https://hm.baidu.com/hm.js?7a645cfcecaf8f711cd7518386adcc74"></script>







  
  <script src="https://cdn.jsdelivr.net/npm/animejs@3.2.1/lib/anime.min.js" integrity="sha256-XL2inqUJaslATFnHdJOi9GfQ60on8Wx1C2H8DYiN1xY=" crossorigin="anonymous" defer></script>
  <script src="https://cdn.jsdelivr.net/npm/@next-theme/pjax@0.6.0/pjax.min.js" integrity="sha256-vxLn1tSKWD4dqbMRyv940UYw4sXgMtYcK6reefzZrao=" crossorigin="anonymous" defer></script>
  <script src="https://cdn.jsdelivr.net/npm/@fancyapps/ui@5.0.31/dist/fancybox/fancybox.umd.js" integrity="sha256-a+H7FYzJv6oU2hfsfDGM2Ohw/cR9v+hPfxHCLdmCrE8=" crossorigin="anonymous" defer></script>
  <script src="https://cdn.jsdelivr.net/npm/lozad@1.16.0/dist/lozad.min.js" integrity="sha256-mOFREFhqmHeQbXpK2lp4nA3qooVgACfh88fpJftLBbc=" crossorigin="anonymous" defer></script>
<script src="/js/utils.js" defer></script><script src="/js/motion.js" defer></script><script src="/js/sidebar.js" defer></script><script src="/js/next-boot.js" defer></script><script src="/js/pjax.js" defer></script>

  <script src="https://cdn.jsdelivr.net/npm/hexo-generator-searchdb@1.5.0/dist/search.js" integrity="sha256-xFC6PJ82SL9b3WkGjFavNiA9gm5z6UBxWPiu4CYjptg=" crossorigin="anonymous" defer></script>
<script src="/js/third-party/search/local-search.js" defer></script>

  <script class="next-config" data-name="pdf" type="application/json">{"object_url":{"url":"https://cdn.jsdelivr.net/npm/pdfobject@2.3.1/pdfobject.min.js","integrity":"sha256-jI72I8ZLVflVOisZIOaLvRew3tyvzeu6aZXFm7P7dEo="},"url":"/lib/pdf/web/viewer.html"}</script>
  <script src="/js/third-party/tags/pdf.js" defer></script>



  <script src="/js/third-party/fancybox.js" defer></script>



  
  <script data-pjax async src="https://busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>




  <script src="https://cdn.jsdelivr.net/npm/quicklink@3.0.1/dist/quicklink.umd.js" integrity="sha256-44BednzIpUeQJcY8qtLyarFu0UCCTbgmWOvaoehiFQQ=" crossorigin="anonymous" defer></script>
  <script class="next-config" data-name="quicklink" type="application/json">{"enable":true,"home":true,"archive":true,"delay":true,"timeout":3000,"priority":true,"ignores":null,"url":"https://www.xiaosige.com/welfare/"}</script>
  <script src="/js/third-party/quicklink.js" defer></script>
<!-- https://www.layuicdn.com/layui/css/layui.css -->
<script src="https://www.layuicdn.com/layui/layui.js"></script>

<script src="https://cdn.jsdelivr.net/npm/jquery@3.7.1/dist/jquery.min.js"></script>


<script src="https://cdn.jsdelivr.net/npm/gsap@3.12.4/dist/gsap.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/splitting@1.0.6/dist/splitting.min.js"></script>
<style type="text/css">
    .char{
      font-variation-settings: 'wght' var(--weight, 100);
      color: hsl(var(--hue), calc(var(--saturation) * 1%), 65%);
    }
</style>



<link rel="stylesheet" type="text/css" href="/css/shake.css" />


<link rel="stylesheet" type="text/css" href="/css/hover.css" />


<link rel="stylesheet" type="text/css" href="/zone/css/i_hover.css" />
<link rel="stylesheet" type="text/css" href="/css/injector/main.css" /><link rel="preload" as="style" href="/css/injector/light.css" /><link rel="preload" as="style" href="/css/injector/dark.css" />
  <noscript>
    <link rel="stylesheet" href="/css/noscript.css">
  </noscript>

<style>.github-emoji { position: relative; display: inline-block; width: 1.2em; min-height: 1.2em; overflow: hidden; vertical-align: top; color: transparent; }  .github-emoji > span { position: relative; z-index: 10; }  .github-emoji img, .github-emoji .fancybox { margin: 0 !important; padding: 0 !important; border: none !important; outline: none !important; text-decoration: none !important; user-select: none !important; cursor: auto !important; }  .github-emoji img { height: 1.2em !important; width: 1.2em !important; position: absolute !important; left: 50% !important; top: 50% !important; transform: translate(-50%, -50%) !important; user-select: none !important; cursor: auto !important; } .github-emoji-fallback { color: inherit; } .github-emoji-fallback img { opacity: 0 !important; }</style>
<link rel="alternate" href="/atom.xml" title="小四儿" type="application/atom+xml">
<link rel="alternate" href="/rss2.xml" title="小四儿" type="application/rss+xml"><!-- hexo-inject:begin --><!-- hexo-inject:end -->
</head>

<body itemscope itemtype="http://schema.org/WebPage" class="use-motion">
  <!-- hexo-inject:begin --><!-- hexo-inject:end --><div class="headband"></div>

  <main class="main">
    <div class="column">
      <header class="header" itemscope itemtype="http://schema.org/WPHeader"><div class="site-brand-container">
  <div class="site-nav-toggle">
    <div class="toggle" aria-label="切换导航栏" role="button">
        <span class="toggle-line"></span>
        <span class="toggle-line"></span>
        <span class="toggle-line"></span>
    </div>
  </div>

  <div class="site-meta">

    <a href="/" class="brand" rel="start">
      <i class="logo-line"></i>
      <p class="site-title">小四儿</p>
      <i class="logo-line"></i>
    </a>
      <p class="site-subtitle" itemprop="description">心之所愿，无所不至！</p>
  </div>

  <div class="site-nav-right">
    <div class="toggle popup-trigger" aria-label="搜索" role="button">
        <i class="fa fa-search fa-fw fa-lg"></i>
    </div>
  </div>
</div>



<nav class="site-nav">
  <ul class="main-menu menu"><li class="menu-item menu-item-home"><a href="/" rel="section"><i class="fa fa-home fa-fw"></i>首页</a></li><li class="menu-item menu-item-tags"><a href="/tags/" rel="section"><i class="fa fa-tags fa-fw"></i>标签<span class="badge">61</span></a></li><li class="menu-item menu-item-categories"><a href="/categories/" rel="section"><i class="fa fa-th fa-fw"></i>分类<span class="badge">25</span></a></li><li class="menu-item menu-item-archives"><a href="/archives/" rel="section"><i class="fa fa-archive fa-fw"></i>归档<span class="badge">149</span></a></li><li class="menu-item menu-item-welfare"><a href="/welfare" rel="section"><i class="fa fa-star fa-fw"></i>收藏</a></li><li class="menu-item menu-item-music"><a href="/music" rel="section"><i class="fa fa-music fa-fw"></i>音乐</a></li><li class="menu-item menu-item-photos"><a href="/photos" rel="section"><i class="fa fa-camera-retro fa-fw"></i>相册</a></li><li class="menu-item menu-item-links"><a href="/links" rel="section"><i class="fa fa-link fa-fw"></i>友链</a></li>
      <li class="menu-item menu-item-search">
        <a role="button" class="popup-trigger"><i class="fa fa-search fa-fw"></i>搜索
        </a>
      </li>
  </ul>
</nav>



  <div class="search-pop-overlay">
    <div class="popup search-popup">
      <div class="search-header">
        <span class="search-icon">
          <i class="fa fa-search"></i>
        </span>
        <div class="search-input-container">
          <input autocomplete="off" autocapitalize="off" maxlength="80"
                placeholder="搜索..." spellcheck="false"
                type="search" class="search-input">
        </div>
        <span class="popup-btn-close" role="button">
          <i class="fa fa-times-circle"></i>
        </span>
      </div>
      <div class="search-result-container">
        <div class="search-result-icon">
          <i class="fa fa-spinner fa-pulse fa-5x"></i>
        </div>
      </div>
    </div>
  </div>

</header>
        
  
  <aside class="sidebar">

    <div class="sidebar-inner sidebar-overview-active">
      <ul class="sidebar-nav">
        <li class="sidebar-nav-toc">
          文章目录
        </li>
        <li class="sidebar-nav-overview">
          站点概览
        </li>
      </ul>

      <div class="sidebar-panel-container">
        <!--noindex-->
        <div class="post-toc-wrap sidebar-panel">
        </div>
        <!--/noindex-->

        <div class="site-overview-wrap sidebar-panel">
          <div class="site-author animated" itemprop="author" itemscope itemtype="http://schema.org/Person">
    <img class="site-author-image" itemprop="image" alt="leeze"
      src="https://static.xiaosige.com/img/avatar/avatar.jpg">
  <p class="site-author-name" itemprop="name">leeze</p>
  <div class="site-description" itemprop="description">因上努力，果上随缘！</div>
</div>
<div class="site-state-wrap animated">
  <nav class="site-state">
      <div class="site-state-item site-state-posts">
        <a href="/archives/">
          <span class="site-state-item-count">149</span>
          <span class="site-state-item-name">日志</span>
        </a>
      </div>
      <div class="site-state-item site-state-categories">
          <a href="/categories/">
        <span class="site-state-item-count">25</span>
        <span class="site-state-item-name">分类</span></a>
      </div>
      <div class="site-state-item site-state-tags">
          <a href="/tags/">
        <span class="site-state-item-count">61</span>
        <span class="site-state-item-name">标签</span></a>
      </div>
  </nav>
</div>
  <div class="links-of-author animated">
      <span class="links-of-author-item">
        <a href="https://github.com/leeze2012" title="GitHub → https:&#x2F;&#x2F;github.com&#x2F;leeze2012" rel="noopener me" target="_blank"><i class="fab fa-github fa-fw"></i>GitHub</a>
      </span>
      <span class="links-of-author-item">
        <a href="https://www.teambition.com/" title="Teambition → https:&#x2F;&#x2F;www.teambition.com" rel="noopener me" target="_blank"><i class="fab fa-mixcloud fa-fw"></i>Teambition</a>
      </span>
      <span class="links-of-author-item">
        <a href="https://gitee.com/leeze" title="Gitee → https:&#x2F;&#x2F;gitee.com&#x2F;leeze" rel="noopener me" target="_blank"><i class="fab fa-gg fa-fw"></i>Gitee</a>
      </span>
      <span class="links-of-author-item">
        <a href="https://www.jianshu.com/u/e4c5daf92fa6" title="简书 → https:&#x2F;&#x2F;www.jianshu.com&#x2F;u&#x2F;e4c5daf92fa6" rel="noopener me" target="_blank"><i class="fab fa-telegram fa-fw"></i>简书</a>
      </span>
      <span class="links-of-author-item">
        <a href="https://codeup.aliyun.com/" title="Codeup → https:&#x2F;&#x2F;codeup.aliyun.com" rel="noopener me" target="_blank"><i class="fab fa-envira fa-fw"></i>Codeup</a>
      </span>
      <span class="links-of-author-item">
        <a href="https://blog.csdn.net/lileeze" title="CSDN → https:&#x2F;&#x2F;blog.csdn.net&#x2F;lileeze" rel="noopener me" target="_blank"><i class="fa fa-crosshairs fa-fw"></i>CSDN</a>
      </span>
      <span class="links-of-author-item">
        <a href="https://dev.tencent.com/u/leeze" title="腾讯云 → https:&#x2F;&#x2F;dev.tencent.com&#x2F;u&#x2F;leeze" rel="noopener me" target="_blank"><i class="fab fa-jsfiddle fa-fw"></i>腾讯云</a>
      </span>
      <span class="links-of-author-item">
        <a href="https://www.upyun.com/" title="又拍云 → https:&#x2F;&#x2F;www.upyun.com" rel="noopener me" target="_blank"><i class="fab fa-jsfiddle fa-fw"></i>又拍云</a>
      </span>
  </div>

<div class="site-overview-item animated" style="height:140px;">
    <div class="wrap">
        <div class="cup">
            <div class="cup__mouse"></div>
            <div class="cup__eyes"></div>
            <div class="cup__label">多喝水</div>
        </div>
        <div class="cup-shadow"></div>
    </div>
</div>

<style>

.wrap {
  width: 210px;
  height: 90px;
  -webkit-transform: translate(-50%, 50%);
          transform: translate(-50%, 50%);
  position: relative;
  left: 40%;
  /*top: 20%;*/
}

.cup {
  width: 140px;
  height: 100px;
  background: #FFF;
  box-shadow: inset 0px -10px 0 0 #EDDFE6;
  border-radius: 5px 5px 50px 50px;
  -webkit-transform-origin: bottom center;
          transform-origin: bottom center;
  -webkit-animation: .6s linear 0s infinite alternate cup;
          animation: .6s linear 0s infinite alternate cup;
  border: 3px solid #000;
  position: absolute;
  bottom: 0;
  left: 40px;
  z-index: 2;
}
.cup::before {
  content: '';
  width: 140px;
  background: #91ECED;
  height: 40px;
  border-radius: 100%;
  border: 3px solid #000;
  box-shadow: inset 0 20px 0 0 #fff;
  -webkit-animation: .6s linear 0s infinite alternate water;
          animation: .6s linear 0s infinite alternate water;
  position: absolute;
  top: -20px;
  left: -3px;
}
.cup::after {
  content: '';
  width: 22px;
  height: 26px;
  background: transparent;
  border-radius: 30% 100% 100% 30%;
  border: 3px solid #000;
  border-left: none;
  box-shadow: 4px 0 0 9px #fff, 6px 0 0 10px #000;
  position: absolute;
  bottom: 35px;
  right: -20px;
}
.cup__mouse {
  top: 45px;
  left: 45px;
  position: absolute;
  height: 30px;
  width: 50px;
  border: 3px solid #000;
  border-radius: 50%;
  -webkit-clip-path: polygon(50% 10%, 91% 100%, 5% 100%);
          clip-path: polygon(50% 10%, 91% 100%, 5% 100%);
}
.cup__eyes {
  width: 15px;
  height: 15px;
  background: #000;
  border-radius: 50%;
  box-shadow: 58px 0 0 0 #000;
  position: absolute;
  top: 55px;
  left: 35px;
}
.cup__label {
  width: 48px;
  height: 35px;
  box-sizing: content-box;
  /*padding-top: 10px;*/
  background: #ff7600;
  border: 2px solid #000;
  border-bottom: none;
  -webkit-transform-origin: top center;
          transform-origin: top center;
  -webkit-animation: .6s linear 0s infinite alternate label;
          animation: .6s linear 0s infinite alternate label;
  position: absolute;
  top: 40px;
  left: 45px;
  color: #fff
}
.cup__label::before {
  content: '';
  width: 3px;
  height: 15px;
  background: #000;
  -webkit-animation: .6s linear 0s infinite alternate label-line;
          animation: .6s linear 0s infinite alternate label-line;
  position: absolute;
  left: 25px;
  top: -16px;
}
.cup__label::after {
  content: '';
  position: absolute;
  left: -1px;
  bottom: 0;
  width: 0;
  height: 0;
  -webkit-filter: drop-shadow(0 -2px 0 black);
          filter: drop-shadow(0 -2px 0 black);
  border-bottom: 7px solid #fff;
  border-left: 26px solid transparent;
  border-right: 26px solid transparent;
}

.cup-shadow {
  width: 135px;
  height: 90px;
  background: #7CE589;
  border-radius: 40% 40% 100% 100%;
  -webkit-transform-origin: bottom center;
          transform-origin: bottom center;
  -webkit-animation: .6s linear 0s infinite alternate shadow;
          animation: .6s linear 0s infinite alternate shadow;
  position: absolute;
  bottom: -16px;
  left: 55px;
  z-index: 1;
}
.cup-shadow::after {
  content: '';
  width: 20px;
  height: 25px;
  background: transparent;
  border-radius: 30% 100% 100% 30%;
  border-left: none;
  box-shadow: 5px 0 0 5px #7CE589;
  position: absolute;
  bottom: 35px;
  right: -10px;
}

@-webkit-keyframes cup {
  0% {
    -webkit-transform: rotate(10deg);
            transform: rotate(10deg);
    box-shadow: inset -10px -10px 0 0 #EDDFE6;
  }
  100% {
    -webkit-transform: rotate(-10deg);
            transform: rotate(-10deg);
    box-shadow: inset 10px -10px 0 0 #EDDFE6;
  }
}

@keyframes cup {
  0% {
    -webkit-transform: rotate(10deg);
            transform: rotate(10deg);
    box-shadow: inset -10px -10px 0 0 #EDDFE6;
  }
  100% {
    -webkit-transform: rotate(-10deg);
            transform: rotate(-10deg);
    box-shadow: inset 10px -10px 0 0 #EDDFE6;
  }
}
@-webkit-keyframes water {
  0% {
    box-shadow: inset 30px 20px 0 0 #fff;
  }
  100% {
    box-shadow: inset -30px 20px 0 0 #fff;
  }
}
@keyframes water {
  0% {
    box-shadow: inset 30px 20px 0 0 #fff;
  }
  100% {
    box-shadow: inset -30px 20px 0 0 #fff;
  }
}
@-webkit-keyframes label {
  0% {
    -webkit-transform: rotate(40deg);
            transform: rotate(40deg);
  }
  100% {
    -webkit-transform: rotate(-40deg);
            transform: rotate(-40deg);
  }
}
@keyframes label {
  0% {
    -webkit-transform: rotate(40deg);
            transform: rotate(40deg);
  }
  100% {
    -webkit-transform: rotate(-40deg);
            transform: rotate(-40deg);
  }
}
@-webkit-keyframes label-line {
  0% {
    height: 15px;
    top: -16px;
  }
  25% {
    height: 22px;
    top: -22px;
  }
  50% {
    height: 15px;
    top: -16px;
  }
  100% {
    height: 22px;
    top: -22px;
  }
}
@keyframes label-line {
  0% {
    height: 15px;
    top: -16px;
  }
  25% {
    height: 22px;
    top: -22px;
  }
  50% {
    height: 15px;
    top: -16px;
  }
  100% {
    height: 22px;
    top: -22px;
  }
}
@-webkit-keyframes shadow {
  0% {
    -webkit-transform: skewX(-10deg);
            transform: skewX(-10deg);
  }
  100% {
    -webkit-transform: skewX(20deg);
            transform: skewX(20deg);
  }
}
@keyframes shadow {
  0% {
    -webkit-transform: skewX(-10deg);
            transform: skewX(-10deg);
  }
  100% {
    -webkit-transform: skewX(20deg);
            transform: skewX(20deg);
  }
}

.sidebar-panel{
    min-height: calc(var(--sidebar-wrapper-height) * 0.75);
}
.sidebar-toc-active .post-toc-wrap,
.sidebar-overview-active .site-overview-wrap {
  display: block;
}
</style>




<script src="/zone/js/canvasTime.js" async></script>
<div style="display:none;">
  <canvas id="canvas" style="width:60%;">当前浏览器不支持canvas，请更换浏览器后再试</canvas>
</div>
<style>
// 粒子时钟样式
.site-overview {
  text-align: center;
}

canvas#canvas {
  margin-top: 70px;
}
</style>


<div class="site-overview-item animated">
    <div style="">
        <iframe id="sjFrame" loading="lazy" src="/zone/tool/sj/index.html" border="0" width="100%" height="100" frameborder="no"> </iframe>
    </div>
</div>

        </div>
      </div>
    </div>

    
        <div class="pjax">
        </div>
  </aside>


    </div>

    <div class="main-inner page posts-expand">


    
    
    
    <div class="post-block" lang="zh-CN"><header class="post-header">

<h1 class="post-title" itemprop="name headline">收藏
</h1>

<div class="post-meta-container">
</div>

</header>

      
      
      
      <div class="post-body">
          <div class="hbe hbe-container" id="hexo-blog-encrypt" data-wpm="密码不正确，请重新输入！" data-whm="文章不能被校验, 不过您还是能看看解密后的内容！">
  <script id="hbeData" type="hbeData" data-hmacdigest="31cabb7095c295a68f49b2ef6d36f41e0997414b7a0b203a3345e8347d2bec8d">9a2d66a21cab435af8a4c816aa61be670ba5bb150078571647e7344cb037e6bf48b7fc5d1268cac27e79b1126053e17e031f908b68ff50ec61651d71c3dacbab251fe8fdb5fc469018c95f8446424af2d9417800919e1db6d975ab30fd03c0e42ff1bb2eda592ea621398988c24b21ee351a28303333693bf46da3769ea16cdcebdee2457d4df35ed3e111661529a614474f3a7954b282bdc2153b30c88f817f303f195e06fdea85f9fb6a2f3e22e6ed6db550557ba044c98ae8b729fcb6514fd9405134af05a18eac2bf75d15b30f212bbacbf003be6e5c6c91815f8e9e8934bc7d7e96247c7e22b700741e7d7da1696a0915bc1e75f4ea1c27aba017ac815d391ecd9ec8cd30babd9a59e47a8a95878aa4cf17419976dd964e240969ee60057f5ae5dcd081b11c5868428cb2cdc01eb483279db6d17b25ddcb5517cefe879c784b2725fcf5d1d2971715793a91d1abe547b66187894dcd62f254683d9684c8d09fa191ee0bd19b75be90a9cd06dedb18731b499231fc214341ff549f23010c62c9077045d57df565741dbea0132f30b0da074dd8aed353516ee278634cfd43238bb9d8bf18b425badbc1db977acc4786510b58942997f9efe8add1548fde01ead3af4e3e984c538c2b8a8222d88bbf8677820048ce029ff82e61966f046f7bdee164b843e6ff2a3960e098e2709f403b36ee56e2be25ca847759ac6e9d95c216c925525ceea3db3f507cd3cbd03fc5b1e230b5780d40b8300ceda0ddf8bde3fd5e7a9c4ee1e450f39acddb5cf9eecfb593592cb5704afbda409cb3651e0a40c8d1067a41bd0289c1b13527e14c8802403e33cd03bb795231c873db4eef600603f8f762713d5b0e75bba5526ab5d9b6f37c6c9732601ced2170e025461fb52488aa14f521ecaad9541d8ab4b0e39e985308c67fda5f729810ceee4622186cdde42ccc33872571ea028819058123141ad6687b989f2bb11c59142fc3bb7b31df64bf01b45a2fa70a6be136171a0f7d37061923a84bba15f5f7363861ffd720c4ad9cdb0313dbbc8179fb7b3ee09d32165c55c0dcc42e627e803251ccc8eb232ddd081204685e9e4d2ba5a3106eeb5a84c3cdbd8a09414a6d170968fa7bb32c649a70702ed80a67eccb0647b4afecc04e379cfc981864ddd651db58540eab857a8c8d8df232a35a4c936f7072fae2482a759dd8055eef89c0ba4076ffc114a647b504dd805d8e606dee1203ba728ac76e9e50af11e627d2d4846340407edf3559262b59fad313ead09c319a23119fc37231c1236e76e2455f185c55430fdf800b30be8a1f1b708f20c1b3530c9936597fb580576d89cb8cb07764ce8f3b2195e2224c34bbe0cc4918d427d06376895612412567d2f574d341aa381e7ed5f451ec1a218b1ac06c22ac74182ef71f8a4df20105fbd49014a1358d367f46ecbe38af6cde5bd2232a89b0c80b20639681b640adf1e94fdb7c4ae13e5b9c5d724264765be0ee71de094c312716e9266475730255127436795692dfb2301c9f5e63b6af2f3966fb7554f47c807f90130d488bcf89a1e98880b134b5395b73655b920424771e9f791245c1b463cb47979dbbd75a34968a73650904dd7dcf1f32d581fc6e58007804ec379cd7609945a2df84f456024eedcdfe5ced6259a118c3d6fe5e4b8a416e43ebf7a6e936b1928248d0dc1a89cf4eb69ed5f8666234a9f31527fe8ea626f4c11f2054c3bbb2d5384431351ed66bf8eb4b230b891a9b4bc616318de727f917554ad15684ed94a60ef077a995f58cb54ebba278882735c8d3101071752d19c510dd7edfb8a15fb924b46bce3680e2d7c80a094eec3dddf7f336c804d1e8cbbb1db83fba56024ab825a92128e55de2ea3b46a1cfdc1209953bd4ccfee5205b79819103ea5b1b34dfe0ab20db48f61b5b43ec6a555fcc085258ab8aca2504943d40eedd5c9abce659fc98a9643ed4a6bdcd32d967bb6aa60dc9d8752dc0c93607272e9bd766ec88f5e0ada0e820c4c640ac7d8b14cf120866da690a9651bc5805cfc84e5d156f92d5c1b35fc03b536e784d9979eeaeaa9ea9d2440e42bf6f7a475c9743ca87f8146e1966c4ceebfbe842f17b60a6bba46cbb1488f7a02172b3278d04ab9a6e0d15883bd28ac30f26d68460ce75a19c263249b9a2d17878a9de18be5e19611373d0e99e04b737a2514db766ed84a6c387fc1dac563dd4e951d53d6fc7b323c92478112431880c3859207a787651438e3ea6b09d80f7bc106de9a847e4f362be1971117bc452eb0d260c903397c2072ba9a2b7aee34778406392b6f7f15263dc3e6ce04ace2ef0da9a95fc42c28040d5019cf970f8ca36fa9ee7d142c286ecdc4570bc8f53e56882f9a4ca2c33368873ef5962229aea93b72ac38a620e836986fb31f66072b6af0433162c056d832ea125772407f79f53b0fcfd6a00156d22690f7aea0e2e760c3f351a13bbdba3f191193b4ff1ab8167381bbd58eccbc97992492fb5931e53a1ff09a45ed59f9eaaea68be5edd05f53886c5491670687319199f19a18cec2c79775321a9238fa90d1051f15eb6fdd868ad40632ab822ca5c8bf3fe715b8eec6fe166f485c6f450c765d33f0b9826b66afee50486c3ba7df376086bcaad022defd758935bf985fc0f1d4bfade71d775de34be8b2c01500b4cc39c85ec5012edd71e694784b84080f784ea6d87e4f5ae6bebe2258274b201cbd13a74c30a6e97b6e5a1da6ae08705f916b822a41149cc8e75cfece8cc1934ce562447b6c8446925160733cb644b5f3af3015c4836a35bde11bfc298e25d17fffe9e2037e954988fadd60f02b799639fdabf800ceba0bf7855b0be03b4136bcbe3b8aa096c6e4d2c1b556bc95eb05494823f69639d5eaa457687c4b31970331095f619278551092b5aa51932dc7fb58153c0dd8088eb3f8b92a708364eb18aa67051f3fde4af36d75b1f40de364fa767e0a8528071fc0152d2cf60ea5bd49d9ec836e7315b4426b87c4d53043e968b27e65f5a08eac40bb1e09777daaa1194f59e9a5d567ec1ef4db633346ba5742bbc295875fe4365003024721a439096e45fe72064d7d256fc351d20395c3ca93fbb6421975eba5825013876e90745b79b33757bc53b8dd9bf183940fc6c32e97a7713a6e1c92cea2d7735644cd555f7782900d31dc9f9974e3ac355d3118ae469acc3d16cee088c064c2590ab7b454b76e019a23c816a31088fd4d1586b720f8a775a960a217e83e1e29be106231e9b99746e7848eee7cd4d7ea5b8d15148c28cb0543ff60c7023eb70b5e952113eb1a7a87d9371c319c1914d0d8d9da566568767372294693541b1dd5ed81074d1fb138eccc44c31e84fb1d7d65c6bb21697a3da3ed6d0839b71a6a25962bbb2724f58a50dcfddf206f33e8d1b4bc8a9fd67c2ac4cfca677fa51a66f427c0a6442b5293750c4048c4d2771e5a42bd6c3b250a0c1f4e5a61e61e3d75da92a0f086928a6b8bf3fffb5fa2d3b3225b50ede845e67f4ac530c27b0d7a41638b2f9a0912f7b89577ccc263c4a6ba87b096422c9778502e363bbe4df5ad837a233bd83ebbec425e289c954a0bd25f7a5d40852a6af505b86e2bfe24f6f9a2891c8e2c344ee921f2f9c61fff96a3b2012fa51839e27e49b07eea3000f04a815775ee5bff0b2934f45ae06424c7359930f65e34353b378a77ad2e330b5c6d4eb2aca9f97a707b605c95ec31b9c4f745420a920bd17e922ffbcd3bb523e7e49fbc60f21c051df10d2c5c18ee7b077af4263ba790be4e28f8453060f54d3acf405f2818d0eec1bfd278b9d0b4867c3c0592d48866de825e8ecbbf530becedb75de2f714f4e513ad67b914ed2b873773812fce4d842eb86b1495c28c135f977b5a075675e180568a301c59980e894420b40ce1b134c95e4ccef5827871395317cd63d5ce1245efb1615230df76d8995e958b097ce09d9d38c222fb19c25b6002333bc334bf147a884e7eec2f444467d5333ad8a9ada3d361a58ad7ec5ca73214f0ae0a8d993fdd31c92d37fc9f8624b4c59e1ae4dd35a64f4420d37d035da744a86f3701ddb1d5e66a988ae1fc03130be42e55839aff31dddc65300b14b642c755ea7903aeb867904c0c052e08e21bd37c23b08793f547bc5e8fe5cfc9d1d9d7f9462227d611aab6c33f0d7078f95f47bd23817842318766c2de2deb4cd28cb1109b085b437a39ea933ec9cf881bca5e1720ea4446a5eeae786729a9f51f993bc372853f8bd88181c00ab65c07fb53c90a34f0bbcc2c7354a51333d178fd44c6f8b8319176437537095011205f0c52394c063e9b18bc1d266b23187f3c7385eb806c3efe973a06d002b28997970899fb003442d1b08744c9f35ac2c69f605c730b0689ebdadd8b4e8152cde11025b6c5b620117f8150e159a9bc5a1c7236f8316f9d99b228c610050b23f9df831396662189cd65d8dccb8fdc1d8cdd00a92ae572d67b0f20e5405c89e46a6a90a6676145328c7691fc2f43e9049862f650bdcae3534b57b8d39c317020822147c66024105ebef19c56c6f570a0e7a2d25c1d47353a4f62428ce288acc1af23602a3a91131cc80453d066bae94f12cfb49f8a110821b6f6fac3f0cb2d9714cc8dc8a757cf456cf067f1c8ca71d94d1cabf7616788bdb5b967d7679bdf80967aed589edcb4b4521f18f4b7690d9eb4320728c51b435dbe5bf6f2392035542a26c54170871aa49969e81e0ac404030e2a6f1d9736786d4805b2acbee690e9eb2a0871e8c7dd79133a92ca3c08b181dd94edcf785f48c13e386a18b86ef1039427627f632e879d81c7bd21de37ff25604b41c8f26503d4c247375b5151c90cdcb267768e38f4896590225065ef72c7da3815eb9affc4139d8c40600173c180da63c155f6b83bc26e49923faf544aa06f7b336c017ac919222db0c57c194541292f823a2bf13c96291d0f6adfcc046e0818ed9182bcb937a741e204953dddce0c72a8f70cee437daa797be090f18dbfb77b26739e193d52b3e446d3a66b05c381ca8ebc967da5dd1e85471b41cbc2cbce6c3b2648ef55a57c238e245a867e3ecf409513110dbcb18ff39392929000aca6166332387cee632c2b9fa15b9286591a47362ea787dab687f23c987d84ebe9c0e3872be6e1acf97b986f6f0d07a8f9a98af9a2ef62db45577dfc5553d557972ac4afcf2d3796de4defb3342ea50cdcb8f3ffc749f7f7575b768ee9dac2c8246e9b382de00356c7e705372650d2e6c13759c744ce983d7bb1872283f4936850d1159115fec3f721897b1907540664393324ce398db7c44592290021f0f867ee97c9d6fd9c4226a8daed1f6b32578f5fd6589a7453a50e4bc02ae0695ca18e5a2643e2a865c753df44cde1ede76bdc617813fe45ac22b29c3d76c93d6cd83bee1947ec5d07e4eee2f4704bda005a563b9232cdba6f83313b673772357e8563c0fa99c731d44c9bbe48ce2cf61a902c11cf00a697b956684f5d68bf638171cdf0ae37ae7460bdee1cb79cddff8e94e392d89b6ee87d8d9fd795c0e0e4b2933db74cdf8257a11157da26071a2343e5ef00509da5f4080c7c7123e0610c79a09a97ba24785c1702d1f650746a5db67f91894c86e6093fc170c1fdf599f0e02b591166c7085c9f9a8565818f38c2868ef748285a7cabb958c442de27eb9d6c99e6da08ed6693e007fb2941bbcffc0ac92b70b4531167a2aeca3c7191baf59845a80308008840687549b0286ae6c3d3edeaaa2a0e90f8a5a81c2c04ba47eb9233209e9927a946327260212887fba07f3a5211083090da7dbe5edf3dd7e2c9de8266fd3da494b5a8d8ef9d1e9ab9753cb09b9c17a516a7cbcca3890590e707eca731c978d50c92d4e949d89783abe2ca27074a563342459e791f8cba4f324994d34d4c5a71522272d85df691f7392ec2c8c012baa376571c11bb105c998cf122240756a295b8843b207db67db1a27fe063958295b45eec24d4a38b57890c4cb4e6420e4943932fc038b134f28d21b58bd44da64f3f28f64dd7cadae7f357bd634493885b060add41ff0117b57b7cb52ea5b32e8b6c360dc7bac6ee6cd6b2357331da3c73d7836a3a41e96a62515d14f3624a5e84cdfa9c52ebbb0b38901168d3ef9074b616ae16b36dd01a45d7bdc5271ea01e05a42e7b33373f77b906669d6c4fe94ee8e2b3fa3321a525859d719d22bb1a78f880562434fba2f28e6f2338e5973a25d6cc85da25917733cf9e7587f72af6d46cfc013209dcfacd704e4a8d8fc65889b820b990e300ae67fcae85ea99e32d93efdc29ea79754dbe380ceb2a245670b4c6c8e3a6a883e9034a93ec3719e5f219b2700b135976dea76fd20f20f1fe8ad061ad247cc3fddab2d19575a61532c675141564084451fe78e4973a40b3cd7497681d2addc363a6f8ea351517ebc1c8747626d8d16bcbdacca1a176d3619829d6bb8870227e8deaa34262739af225acc39751f2b9dba82753829e34690b977956915b59d382529b5021c9d1d9c95df73d8bf73cf096011a664aa183d5fa48ead32b6825b559bfc364b657a742cc7202efeb6ad029a46d56d73e214651e096f4d88ed6fe53f5de3d90e6127fc9d814e282c949d5d16f4458409b3f08d93cacee8f93e6412366c4754b26e54c548b045acec033e73d8e776c6144c4d36333764eb3f3248c783b5be493e864a53bf26ce8083455b7f7dc2b89e3fd0780b714a42a0788fb439d655f2b728e7f8b08d38b09aeb6c17e53f4719728ee901b434b428d102e6b1c2a5dc2cc6f15a4ce72cfc33dd144aa2a1e61b25cc1713728226c65f3a08fa49be8df3c791e86c16235fbea2aecc2a847e18e9b919178d655cb8b5aba3b0bb458972af8b07278f3a0ee5ac9b5fb6a06cccbb119362a7c6f3f73eeff6610a873b073c3f1cb51a06695a8ed3f421ef44ba4c579d108603f5265a3fbdd584c3edddca4f3b4a1e7e717468ae0caace548302bd8d6d8d8ccba6a4a52669ce0861d08be07f94f712178ae7c29232b22f1b106fe48b9f3d85e31d59a3d5a4821868763102c951529e8ac2417ab6c0f09c51ddc35d03dc61f45457c12f43cca8e5aa55f9eb8f9c3523f57383c6084d76d899d38271cc042c7a78984fa22c60fb7173168fefafc007c8d69c8c23289c8bb90f3217f661e476b8ccc91bace9c66155fa03bc8879f31aadc972245a1bf34c7d9006813bcc9dca57d42d347835b96de53924dbd9c057d6d628ea7d5b103ddfd4e63382d56aa833ce14ab7ca7889f7d4bcd60e5481080eae2e6571b7123ab1a6799eeb460c2ca56c8003d964a6fb644bae2e05e9bc194db8da5cd4aaa804366eb56ec818336ffdc912e87c63312e4f305de0d27d2ea361867fa1635fb0e929a09eb2878fd5d66148470b1700617702317a02d079ff749853c0d2f2fa88539227920a589d8802e2cb72634b90491d827db8d4605b15b01920326b447bc0e1a06379b6a5cd6f648c5ef49984e714e3d961535ecd06c2f52f456588b2637bd135f5df47053e08e638b7ce5b5f5f70ce660adfb15b05b0e82f64a3502219c5add69e3bd601f871e68f0d21650d38fb05d7c84caa959b94ec159c908bdeeaef02e4013e0c4090e97b160fd46aeeb3aad8d827ad54ca5d4ad85d7b70988e55f5f64cd20351872529e66800d734481cd8f1ba82fd4ee30760d6775824bee907f03b56939b6557559c76b9c92e69e2879f359f48d8ad397a60cfdac190a414a9adeec3c5e4fa1a0a0d24f1a5200cf117b4791a5aeae29bef863d99d51fe8c5216aeb8b66f512b9c16a5264584b87d3d16d6dfe966eaf7627d4f0f6ffceed894df3e4ee393c0c92301d97a153bf84fcf4e2edf1eab33455cea90a5211b1406cd26c386db1d45d6343ed11e3ab13d03ac3083047b6e6c7cb0600a060e42aafe3eb9df27c415e8766ab8364540aa430ed97bd707d3803021fba084ff93090d5e74cddb8ba019f44252399ef721f8b399f9dee54f805032f38ebdee1591e2825b8bffe5095f9238d269712614bf24708b94bcc270d630c15bbe0c3be1ced46732035ef8f5e4555ed6982a3a0b8c7cdcbe1531e1bc9870f6599bc1bc98025035f65e4eb52bddebbb563a2e4498d61ea074caf4f685e9ed216d8bd172cd2fe239cf977a96499d54f7cc707ca338684213c29050f30f613a820d1e6d81bdea0e42668c07f334c6a56b168b02aa207e90fd9c0e5e06b09bbf8aa7d17ca067ec62ceb3ae73d43077c6f96ae91619bc50ecff0c27d9f88aad08211c32b09b19215ab5578c6815b54fab0375b7814e2ef5ee378ebed7ab323e5a9baf864a7212cf2ddb6d715b6eabb1f11cfe0525d8403789036fa78c769b42bc59899ec4e1f6a24688b03e375c76956605d6804958c8031e402c44f077382411c2e5202f493fe6ea24a3fe7e32a7f1ffc8195836c5b8ea9b2ec7175e12625b928f5b2dc0e29024badd8bf27918ac1d66000d803b86309b041b473ea1dd839168bb044efa5139ae0aa3739febba51a2b97ccd81ae45c5e574773c8909e6d8fed27d47b8873283d2b6575adba72f2dd2bc538218297db4f397563253466b39f3b0d93b2799b6772aec803a77eda8fd46c3183c60340508c075d8278e0c2a3e35b3345f425f8cde72c086fb59681467b1966343ddd31dbf762a77a912a0c0e977fed400d47c58dfd803c68c79fc882d9f402a8851c8f209ba8717017bc80fe9d4f0fd623d4562584304f7f249ed1638ea279b07cad58dbf54b112095fc450fe69a8a9b931ca9e2f3708dc2298855d6b5cb1790313c754e8fc164e31a2b087014b4b221be357782949345cfe230d98650d51695a0ca1622228df6c6ea2a0a7c57ebcceef1691ef6595062ad8546bf506f0d4c26bbcc9bca5a67a1862b97ebc903098404ee99da50c81d826fea1dccadae011434584fc23b0bf758aa0fe3a5ca1d24b3877b429915fc1fa00cd323c2df0aabe2becb1f54e3713ee482604063568e2fef6b891879b1bc2d7a2f59505b9c743f069092a9af18da092cfade7a4526857e827ba71e1e314412ca561424f7f8386b3417e4096cafec53ec2f3bf1e99326043c3de6bc41fce8ca4b95dda5dc3d38d3230a819e7359b33416616d722a1f72d964e47e3b6b8e9aaef2bcc92a107412a0f623d37860b834ee73daf29ada7f31fa40ef073211e72b6f5410e31659128bb0e7bea753342eca985b16cf488b526f6d7e643d3737aa8550b2ba8feec88f71c2e35ada7d887e98ea34b56810ca94750135f9c5ac1ae9f0e534491f7d9676262fca687309fbaf0506ff2a08164e5176a64d70e4a7c2086b839b6b6bc86350d8fbf5452d1289dc0f67df90848292be8c513db44e9204c334e974e6fee8e6cd88c36dfe9f24f6cda8ceba4e3fe2cfb16c50e0b324336943d471b2670b433811ce9eae9306f881e921ae2592ba17c71ddc92b72b6248c90e0d6493f79b56b0ecb4460e22f99bcac2d51a16938b704c45b020fffa491339a2c511663c5df3034f0deff4fad4374b45e4d5221cdd81b31d94f71f5e688838527aee17b28cbf0e8a0a2ebc6d4393200aab4f959e8039169919dc2e2c71601c78451133006fc18d691c53da2d5ec35a3387293274d54d6a8d6c92be30a716b63c3b0eec82ca6c6cc335454b1336d6d3998b56121acbe31dfa89be8b99fa096d60d43b3c95584195252cf6b6653965b5823f22b3cb228ecb5d13923e3a8076dda3ecd8bea0f11e934ab203d77f4e3bcb50aabbbdc978a05669869f3c640a269af6eef6ab4f71d7f90b09a50d071fc55cf1849ddaf1ff94dd7f41a283f3095b54e7fd7612193347e9570e38a3f6ddf84563922db242b5a4e9192a2700ad281347dfcf5d6728aff4bf207fcc65c3827551dbc0683639026e736e4a6eaaf8cf20b5c8e349ef57b6ace4ab5a2c5c0f76529b6c2b88685de21377be36bd1571d5ee340d45b61716e11b738f85c44cf261705f25a7b3403b16da19628e6a946a017357fcdc8c465d3182c142448896d53e10d5b38a44f5763e8f3d3ee5cbceddd39950d05a8f43aeebe6eddfcd940d171e529438252bafdfd67807061d2741ede88549f428d02493180069e9ced421d03be5605154c9b87a1fdc65946a745647850f926daaa948fa5422312f9957cc873babe2ca1c672dc50d246e4bb7994142f18879ef52b539716151f384402fd2eeaeaca857969a4f6b1dd6716997624a5d7d7d06a5fd7297f332528c8a1913e9c07b0aad8960e21a4f955a73f23104f502afd9b2edad88690c5c430f4b1ec489c4083a7f1889738a38afec424ab1a9f54484116709388b81845924bd703c0031dc5104be13456d665995fe618c951ab61ace46f59678ace49daad4b19bd6f9fb09b429831385c46e6aea83877218251fc0cc47eb1b35a01cb1245bc86212a806978200f516f8b81223f1d7aa3445f3a697cec3523763bc7b5093891d3f451c74dfc461ae5d98872e358b537b44d017e6a647bf0c2ea81e6d76644441cdd120379a018bc2231687c5d90543bee510481c743bf930ddea335a54639013d40cbba7266931a7748d27367d93a174ffc6d898f69ed50cf8260c78cf3b5994c1137b7c4b072ca85ae6f47fb927d86f6988b7e625ec51cd85d632475acc518511594cdb45428b94e36f22d2bdd5e0d6449b8b463d1a6e7c0fbe36051f906d92e9a1c64a12bb86c397ddbf0bdee6128120f4f7d1b8fae38705121acb4fb349c743216e2dc38f0e3b353702c884c71d4109eb7388ea736c2952042fc57fb35be7896f591ece63c501101a3db97ce6d8db3cf88aaf67e03347cd1cd71ee1c5c9d6a5765ff40618a02d572b25bcd7416f3e2115ee7b1611714c23956f8df67e4d718c69093de7e066dbb456951484564083c965d9a6c5282e7a6864a4531a0db7b441970dec2ffe6be7f7a2a79dff47b3b02c87cdd1c4f87c81cbfcaa2b048a3e0909bed7bc81890af546437bba6109383e3c32d6b5d3a88b45cf3c6af5ae5d9ea0f81aa3d89302a160354229f046de824bc76fe903f72a4f52fcc4eadd32b6b600d12385895257d523db689651b320f4adf65f886469491e78aa5001a50cda087935fd0ffc331849a805fd4c2434b65bdd3f05a27b4faeff59aa159fe0a1b108423f8d14a3e89b3b09faf4d4e16a4964113676798031bc98f9e82bc381c2fdfb7b95f39763fa5d9ac8ef42dcac308cf8215dc38247602089e1b69db154ee464a6eb7219382d55a509c4e5dff6eb82f02f648b84faf455cc6c2647b1e04bf471d9ccc0f98bc14314593d99067da9a29ae13eacfaae7a599ea998f75ef2cd8ed651e1442ffa2c3d0c1435141930ae61ec8681cc8d712d4fa19fc4476e28b6df1131ebb5724371ed3f1306cbe38913a2f6e857d11e04553d543e733834c2d5e493b7765594efbae3906e55f7507228e8e1cebd7acbe80460b9dd14fd32189fd0ed566299caa02ddd42a44edf28705a1807da7efe46c2c86382eb8aa978e15e7993d2f5490893d73f6456e5cc05e8e13f1b7e24921785b1a10d482e79a491046370c4a43362d467d5bb170e86bbca3fd4c55579b271fb6adaf98b3d4a13f2b053209679f4b52ecda0c74c3034b34b4959dbcb4373e9c7da5765685d352a827b2a1bd0ff009a9405cb38a2388896048b6fef46389c46c21a1b46cf0b3850224b3634a765a0fa8d3bda4cc1d8f76dd69494927a9e266c6078a4744671e0737d5a364d0f573711f41531706130d159e4a40800808648e6bdb5f43eda1395cef2ef7a3e5b11b82c59a7b1cbf7e22a97aeb4a999310a02dbd10d423ade686f8043026717675e2bc1b9ac1d2e3e098cecd4175372c64902e47e12b737055ae50b28bf0beefc8c54666a67a606adf93317458e6a2c504d00e431132bca9be9242832c469cd1c0317fdcaa99b1e00e7d93da13f809df517d7bad9139903d3cf0cee08ac2a970881e97cf57759a893d67d83f53f40f87684156f8f11e52f2fa92cb017150e181591100c0edbf9cfbf74edc66ef454ae83b435268b6551c6df99e137ecb954af48790d0de2a4b20a5f9f0757bc674d9d43d19122544824183658041d2803e3a7036661641c77246850322ad2a72acf2d40263036520e0557d3f89c61f49e93130edaab7be5b9aceef79a0a2b295078212245dbc63b166607a32e81809541d82a763a0efba39e1ebd8277d547a2e3bb5280b46a24fcc85561c4f63aa1cebe5278edf56757f1f1bdb6f6285efa6c984b74d3cbfde1f096d8b48d74814974b632dadd4aab467dae325678ef3a8df37e6c9bb36e5d84cf07b237646da46c4414b838b6ca5f318b9ff6c802485687bd2087a3aba990728404537c23d794d1cd9a5131c3e60aa05df8d91d1b7da778b2330fc75dc68036a8ccba13d547742c2380fc6358b856b9a9f36e4070aed687f6bedbb3baab45ebe55e459eae7c0cfb571533941fd35d6af72b11e653eb436839bde519b11a0cca03368b62049ef6f1b25aea4049e79e9678331accad2b9e58a144bbe0468dfe3dd1da25c7bfcf6c98fe1bd5e1debe0ddaa38ee237544ee9bae87b7b6387b07678de85590f731490171d1adb5276b3295c067f8c8601fcb3b8a01c68011ac37e97192646c08dd3227250412267421763592d857604d26175fb4aef155bad9b4d35b43d7118a724ae5e623aee461e941b24a23cdc018e0be8d8f65b8b3c2bf8a057030f43b7b8ca1a016f155c15e85354c799f23eef40aee20094671540a20c778d59851193f0779d7574030db103e4850ede15b3843b752e5706e5fb390c211f293e32dbb8aaa2e9b86f5912dbe1884e6fe975bc289d94aa267eb8d0802f1bc4b965c7e04acca05890858ae8c0865507c33498a355955fe75339b179aaf3e45d82ca15b0b6601fa14c008d8739374e3a42995d9a2fe66cc167554bac73fa13c488e6c036664e2955624ac8efa3b236dc024a05d66463ef22d590ce5f0154636446eb496f85b275e4f4464de2487824f21d0d9de74aab7aab4a57de41a375280c5a24a462bcdb793ca8e6a3599ca9c86058d772ef0672a4811f87e48603fcc46bba7e59076c1f44849b010542c1b194861c5e74178b3c04dd138ab8feac5f81e44f5f95dc7020da3cbadd4ebd2009b38852c59d324256a4b92c66e3f24cc29a0fb7e67c986e212cae10528bf0dcc48821d0f3d3a49801780a7707b96be6964624942b90038a103d33bb5036ca6bed6a9c5b37ea06a2edeb7e86176fa250caccfed90950e9f61d739df0c7fe5a9b9995f2916a85e192355d80a1bb7387ce856084d4e2e56b911c6909608dc6a7bd286563820046ca3071e96524fd888e86b1098ebb0f47f1d5882d2ba98238c45ef246ce46ba95866edd490c5bcdce3def3125f4c69e439768168359ed3a62c7d1fe2cbc41193318500d5c94f0e89e39051c6eb953664c91927fe4d89eae9c04401f97ec45023de09a0dcb89e682049ef96148b8e8944a49fdd79e155781d418ca97d38858861fbcce6c252b842cc83a1542d881787794f29b78b529af0f1c72df39c8b700c008472c5e65a8e3dae410f4eb7f56aa7ca9e601e070a9305c33984bedcf0077ee0f462402b98736a2593d22c0d82b0512b2bbab6f38ee5b896e2f9c8bbb2b79e478161ba17d2597ce74d2ae167cd937d43e12d09d9b8eef6d204d954282779a45b92a57b28397e24956cf4528c17d267e6dc18a5dba70471459fc66897949cbeab2ae8d845f89b812fd406eedae11581f03ff092e1d36a704a4dbc497df58bbec9e04333afc2b0d2829f179fda3f4a47ea5eeb156d416bfd5c97c6b094e220e68bebb434520963f259cb02ad30eacb40a52395030a65c2e25b9343a59a81ff7c3b66ccc779bfc4225e756f4d01cfbc670332998e0637a90a75fe51a0e5241a3c4c7dce21f61e968257fdc4fd3208e019c8f2a6c8eb13c510998d90f3b10ce52acdaa9ab045b3c577dd9e7b521200b37b71277c7237f4ba24db13ffa42d0f265d3aad34d034099cc4ff17b15f613c450d67681b12d2ee90fc742e7f8f5009ae10007d2eb34b704d3c8f4fa62e002972af97b1e57dc7447f1e4d36e5c793b7e20c107a4f3b34284bc7c40bd53642fddb63b7ba736da7d9676c6b333208a48338494cc95fda7aa58e6386e2f13496f84af1f63e6e58ea40745591c8a2e6872de15445f64e77ed8d03d2e595afb0008d0f10499bace641822f8ff37c813b29568203c8d024e78f074aa55e517c92e687fc27308679830fdfdcc72c815ee0218c4132e90435b06dfe9cab75b2edfbdb62ebb264afbc13887478ee54bb6dab8807b91e05a6277f6045c7b923f4857365922c85e5d4c23f98049b6a2e57b0d743544d66ce614e074aea75eb957686e130f0c685fb74a1cd6007afd8af574c7cc12f466d1c1edcbb443fcd4fde5409d735a0cda48f713ec960c7335d3402d3535ab313dfcc57f83c75968aa09673e8574248049d9eec02657e8142deb110abbb1a884ce47fc00d84a1b0148a170d0aa63cf42cf3c855efbe489f1e9bdf24bd8c1d795087420500a26554762e2e1be70a4aa8da56639aca6076d61e8aab00b2b50f56905280d4f17710a0329e2af609a2df1d8b02fb98eb58b680bca3d6048e5df797ff97d51502edee1464092c1a9f59000ae937cc20fa3c5a79bbf88bc7c6d78159805226edec5b33dbfc56cfecce37d22b2ace4348b9a4cce7254baa9bf6704530319cedea849159f31d7fe022accbaa1ccc6a3058008c07d9ee064e3aa39eb30faebabe5ebd3fe1c667202b0e863b5e47650a77691fa7587e95fa6277e620cf6e64782945812e6ba1fcac6f189a8f3be6338b2f3c96f01154b9dbee6627ae3c8f6194ef42162218226b4c877fea84719a537cfc3ba3675ff38e4aec7603fd47a3f54707a6cb4c97c15c598a2f592e59ee23720d4234917fa22dceca4ed1d3b1a85e1ef6c4cf755fcbce35ab08c4be95889054544f427d0d02b66de96f5ef630ddd56dd03f5fa60bbde17d6ef5a551e7fe06c7b47f5b081d2741dc5f7a74102c68ad4e0a75dc28f7d41a6088e65b8676266e6b17dbf457f86b3d3e24ebf962480408684b4787d5e676a3a868ebbee5153981f939447b2c9b27a0ffe91cd99612eb113994626fd93ab8270b728b832ff3d911392fb3be3e77ac4d9041bf2126775538482c28b110993b916da5d1bafc4703b40edc64481210ed3002f6f0b59fcc896578150d4cb22dd9f552aa6e264de03d8bab740dcfbf4f5b4ba7ab067e64d4529e02c89737bed10586a5a85def0e5eaaea7033a6c3a6c2ea9df1455396eb440661a773b62f62647e27eb67f3e5686bef091572a5263c16fc4fb738ddebfb76105241268b57ffdb633256d98e72f7450dcdbde6fc47820c6a3e7a102cbba922fc704c1c9bb066a5d4c52a086fd1945ca6587d8023227be5735bf28586eb5464bbe2b4699ccc1562981d5351297247e74801e72f5c56a18f554f7baec311a98c969a986a07b4a24ff09aef94650e1f2d488474e42095b6aa9faac8f272391dd0f4d191a37bba9c0df7e690ebe1edc172047386753f4158fce96cbea812b4a8a38062ded0481dfdd366d451aa476d0f7402e586956b39c6fa6b394410085a7c589124e2d23511ead9cd1182400fc424ed9bbefa28a5590c07a50adcb5338cb24f3732c0f4a57e8d274aba838eb5eb0d76d03b1b054d9edef424af8de75a22e5272e2d1d69c406d83ab63ffe62fda2857466c3ec5f35eedc3c4bf72f9c0d88785ba450cca7257c158a88430aeebe8c947148ae020ca8b69186112d094b659ef4a59683feab1be9ae21e59cd7ec9997ea98f04b88268333ee4ac7058860e14aa58a599b8ec167890e3bf1a2d9f5b24a24b99a2260317a50fe12059142a0bb75f49d10ed28d707815043048cafef2b78820550d863c6dff04c0e1df659d59bf26914e2df559eef11ac4b4fda61f569b4c37892d157994091c1fc04721e5624950b027312c3d6eda920610187c2e9e68423a2dd12cbd4a698ddc685736d1d207fef5c672cff225770e6336161a6eb5da831f20a97d5fe8a9df76c81b9beda8d7116d01619d0791c04f5e9a0fc47d274144eaabd54763dc81ef2e0c9fb6f32ec8c3263d88ea41a46d6ffbf026aac641d594be6be52cd8ffa0b8f5bdee0b7d961db1b6eef8923576bd8c7679853b9b1ddebe6bb44e68de818f366694a5dc51ec563c2232dae162c970a4170d6f2fbed06763c3cf3bcb05b3b29f3c6a8478179da473e773fbade917e2df4042e18f32bac5f4e1ec044cc43a61da6554115cbf17dd2c00e89bf20f3f9007fed2d0e4dfd78aab1ba6698db933b1197c0b01f8ee2e979a114235e460ca98f37d59f0e3dbce3c55a643f1fe0e8e6be2997b41344cdea32f0009b611038f9f318e71061c3885db695e9ebe06e8ce390296a21ddff81aaf043fb1799f6e0b307be9fbdcc47f7ba4ba8a5a7d7f2580850273e5aa5d8f88bb7c764194da1d567ae426b87204237946ac89edf16b71d343e61ec08228a302bd1311cb1376fff87cf0b092429128a3151373c0854576edc08da8b1536e7f34a79815a231d85a2984c69f5724e3bfeed8a76e838e8b179f56bded24b88ab8cd812949bc53f3a9aa31601ebd4c984c7ce1a8cfe3a04eaaf5b5e8d892c7fdeffc8993fa5f79ae275c8f7898708be60d4a831439d7f718c97069ed32157581430e1b06516f22fa26a81e10a350598b2a08704b253af31cc4ec07d96a1f6c2ea55b7c8e16942060679ab08be9651274510e2bd7112e5065e2bfe34f94bb223fc1f3d2da2bafee806d4f15c0f3d3e943ee241008677e23c05ae5bba98749c1ec37de28715b74d58fa4d59e1d068d7671971ec9b571e656858aad201031485b5b56401bf47be4237fce46d218de782f313b40cc2964541bcd4de7cc8d01b25cdda66a8da729efc6822f98520c80297ef6f658565bd09630666cd8dab97c19068b0c61d082ab8b41fbe1445531c46746874e5d8f717f8ecb841a93898299be71a78a312a85298befce0217dc25a41ea848caa44c70e8c51197d4e537ea257627381b571ac19de793d38080f5992ac83bd085db9b5c00935cf36f079c23c9c329ff97801e4670c7b27237d5953f8c0bfa0d050005345608e6c4c68d5808b3d426c7fa15c85214cf9e30711acecf159c889c4d5f488dee4e8b08517527c0fcb09d60de1d5a148e0b230d0bd425d3ab1a7fe985e16260eb5b3454061ec0476bcd2eca0e720125f2be2ec50845ab303bb560bc8a9833e2c9385888c40f033177c01bd4a7b948cf685d258fa2afc3777e4b13b2732ca6f1b71cb4843c1b1c05bd9e1be31a59732f5d005348c7901722d41d80c460fbcdeaa8dcdd8bb52cc48d323874a93c1a6fa7982cc3223a2e1b229be17e04452fbb48ec9332e96a26a75216fc2563403582dc7a6819fc0351da953e5fbd37d2b995a9a599d20b3715aa6f919ae39f02ed84771f06d414d925f01832fb46daf18624eb9934846c10a8eec906e1a78b46871514f58dd12f4454adeaa54c95e1f9ba625ac3745e332435f6c5830d109f9eb57035da6684d62e25a685dfcda7da1dde02b2c36f8a1b8ce1b5e8e26045321a13d7bce616f3f41d88aea92bf9567ef95cc4f7af933a98c351d237fa4c2e14cfda1600afa295a913fde300137859cb99708d52368eb2cd5de2df7786bc81089b0b12b7fc36ad862e65ae2b7b69bc3580b9778a5e1530da03b9dfaa5d45fae0f1a5c1ce4a5987e59fc77ec48b123b8cf51e6efcb83d18023ba73527cfd2b3c6c5e89094290b5aebe9abc41dcd06aaed2ce95ac741500ed0bf9962d6f0cb054b17908385ffe1a289fffaba34ed98aabdd519889b5e32873bb90b25fbff49b2fe6ffb1ee1f3de3ab199e5d806023bbcd2ea86717636f993975d0a6d09e67d128be7550481475dbadb7817b4a26a10d824edc74515461cb83df8f8b0718842e2d7129b977685d7f8b0d27f8035200a1242fb47c129be5a9da9325763a53c621572c19a9bf6b514d184a96285008d495de8b911e36db46c0aa6f69ceb9b2469154eef79fd3e545decfb03b90efcc8b102e047fd1d633f89b50b31b458a5889f6f67094f3a03b6ef84f1ffb7d7dc02a6310db85d706275e73f78bb5addde160e5a1f0f94e5b3bc2e485294e2aa340e13376675ad1f5eed7f16b03600a5701fe0a4d53d64f984d0aec592be4313c66d43fd1a7fc9cb2f74f6516af394f6cfc9e721d2b7084b0b6ca5a2b298ce568ec0e3c5d58b5d61d72a1c4bf9a47bbd22dcc4b073c817d8512fd1caf083b69cd47ad5b4ac2d451941255a3f18f74cf95ec3f8cb44165c4de773434f60c9c7591726164c1f0890d1bdad2b9cc46846da2d11f30cbc09157a37617f9dd9bc4c2bb45d919e57f7dd5b7327ac7ded71accf994df78916c79dc924ab882262771cbd9bbf7934d37a0268ef6190fe676156924eeba679211ed4796f68fa2a0fbd169f7de169729c6ce558bef4c9dc2b85b8e8b136995c97bd5b9e0b59f53981c3e2517bb81c92b205a1c6aff657931704538f2196ad8870c82369afae35f892620366678036a231b54065a19711755c8c24776c5f121a44c708d1c7fa778235baafaf3ca2fbc94df1228659e0c09ee87ad56becffa378b611fb33ea5c5f8d4088ce7a2ef161d579dac5cd1ba6d0f29fe753bbba697033bab61b2d85b7f730ca3261d77ceddf2ad397b1761adedcb321933985fb8647e2dd2187ef8253efec9685d3be66733376cd3035cb1b5a2afb5ff80cbaa612c95efd948aeb39e4cef339e3b2dc7302bc1075a0cdebb0280fd286113b8d8c377602c534ff7120aa503fc1ae7a545c1b96c6a2bd4bc4cdc709bba871cb8f4fc6247553571d3cd491f28e9bc092e4d1fa0d2434ea65a086bde812f2668ce8865bf8482420e7978c8beffee17d7e4fc47ec48c2a41ddcd81c7003cd8e04cd718c1b953ae17280ab7503d77fa5ecec913a257b78ce5f3a4a2b8c9c143dcdbe419c13ddbfe390f5ad153af73beaa5bc7c7e07a704a927a7b599799e48c67760c27db6a87740cab17ac8a8068e740f5eb045415ef2c4c0b8433ee2637a427e6522d3d5878add0bf776bbaa2af94eaa73bab6bc789b893da935a42c9276adf77bdd45e9fb7132d6d86ea02e2056ad58fb132006da79e13cbab2566b41b28d4071d6f29916a7a81d83dfa7f3ce145eda4cd76a0f144b0e55bec95a2ca7202b938ac3a5abab2c3d30bc8ba1dcd31735d8c1153a890d127a47a747cb74a3309e33077a81c0d5556acac2401ee1919efcbbb4649a6ccf799f37b8bcc141a72f5defc1f6a6286fe466016b88e1996157f24c7e92541774aaf3669ae7b35939c2476a8e27bb941eaf825aa590fa33349c54388598f2970e367dd7590e9fcec902f202cf28e86317810a64fddb0a1563ccd6fb9c095f3bce79b52500e2a434fc1176a819e288983d25b45efe6e16cf4a12cc73a01004cbb51c087247bd971b354806bca2c77cc07621c8a00d59be3ea90b74df3a830fc341b50f8ca33bb4c630903190b62cc785b6404ac5521f34680e9cbfd7f1c556ce8101354de3380c5ff36893f03208021b671e3550e03eea84931670eb4db27407751e04ce539ec202b634bb4b8297fbea534912c23e7c7844ed8d31cd700ab26c5397cd054bff68561cdcefd75f03fad8251c4408afd433eb4cffd77c18987ee052f931c85b7c1a3d182a7d73c68d4702220c508dac641c228c4af550e09ee3a9670806861b7734181365f25bdc8c0216a2a5d1af7aa429cc7c9e11ef419910bff380f7949180afc7e6df149a857d2aaf5f60246d7eca5d68b6a22c21e82620ed67527a2aef63ce3e5bc75ae0334beabf60fd6b7f82cd882cc2bfe1c6bffc2a0a3cb9b343356364d7f81e09c88c5cbeb74ab1642848bf39fc933cbde66483c9af23eb9c2c3b8f54eb02c93330b648a3a17a7df61171782cc1d637694354fd704837a2241eeabfdae0a3590b1a91fa9d700a4e5c440ca1b72bb3f3cbb959e53fa0b8adcb13b28ab2a639e71a922814bf56532ead0b7f93a84e0999ba3921b136ec61efaa6029188c839b4787520e92ec5cd66706f8421d1238dcbc6a57282203710e7b03016462aeb4f1bb628f793e6cbba077d328a1264c8e954bcfc764b470d056572d6317a25d9af27fc18087f4443297e524c9fde1423876c5446fb2e3bff35fa002ca791afe6a352b8387a53f5c8ff4a0f5d837152e1cde7994067ac93265f33699b99615c4f513a8e0a4d404d1c283b11ff990c9263d1e112d8608e8bef13846468fdc374894bbffece062fae7f879f12c10f897d2871ba1420ee8fc0f3d48fa695cec92a5096e79b17bbef72c95d2d20e4b11d775cc54ac65af714a5aa5b5f5bf8f3fabc1bafaba4fad606e41aa67bb2b33747f9c5286c7a2588c75399da19415c5e74e80317d188732163d4486b4cc046ba4afc04f3dde54781890c7ab2bee01cc396e92cde2895d844a1859ee22172c4c25dd3e34b6944b378fe56d650e15eee2964ed3d8870cb63f3085b091450b47ccf0007d675477868e68fd05fa377efcffddf093c92ccfa413259ebfbd585f0362ee2417102752383da88e87ca39fb14b2440fbabfa31704a2ad6b50a0a624a0a0f88c8dc56f1e2c42bdd50633b565a685cf3bfd070e7013c2bb4da6535a1686adce1a5ea493870bf03f072fed42cd7d75468413cc9e8181cd450499d707b03b0d80397bbba3b71d9a65b357601c4e33714e0c471be81c2b57b6f3970e914ffeed4cdef28991337e5244d534abccbf6b03d001f5b5cf73dc76bf7ad8705cc7df6ef7872508e1d70d3cae8b3094c98fd69b68fe0fecd3f28f34cb17d49f9c823f5a62cc3a2ba5854fc881bfb94ab4ad04b6271e113cbe25f781e194dca49d444f418c47764c984475809a77220a10592aa82c77940a6f830c90761df0a5d374700b79933d6d92376918b0b9b7fcc0e73b91cab3db3cf63ce3adbff1fb7a59918e64ac1cd19f00ca610a67d61cf592ff9a37d5125be4e4411bc03281dec2aae453fd17c473ec3d930392183c742d4b233801cbb28c17fc9fa4dcfb480bcb002d2c25e030b82fc6f5c2f7524af299e5e73c270b8f728c80742cff6032510c3ffadece2addc78620380dea8189e237efda45f8dc44414d5133313f17b531c32f5bc60ba02e000dadef8eadf0ab0d4a55c3d5f54730220d2b763fac2d1130acc84356efa29a7cf76b6fc942cd43a9accfdd22cb435059ab9b1ca29afe9c3cf350914d1d880bfa03df0ffe5e0ee1b8d0d077c68d67ff03321bdc9b349f7e750de6924ff52f49531a33d665bf5c9396a42467c5cfa66f60204156d4f15854b0ca6e259d5c0ed9ace1618e5d1232c545c3ca128b93a8f7f9537e8cef2e7dcf6787d01fa9b4286e76e50d40aa85ac4d40b77df2784ae6dc8ab46c28d4fb8c87efe3e55cdfbdd6d39a1744a73c727a1c48d343d2d56d58200ff4bad8ccaba0e3f13daab5b5ba516115db7b283a1d860032a0aa517fe6ee710e4bb4fe7357fd947f627244aa5c78c0a643b7c8dddf8b1aef1bab90d08be2e4b1ec0a877abad5b18b033d8933bb64cf271b8d8a0909de00ff15f433a644a4d7c0f34588d0677978815ffa62084aeb128b076869fe5e7e2c72f137b60f796980719568f31e0b92a6b997f3fada4128bb29cb21f277b340926d3e487f91b505ae1579bd30ae41c1b0a20993a38f163ed575f866f27e7a278c4bf45edce79eec06658c3fb526008d70570a3772f0f6fbf9400a7c5f5d5d73aad02cc65155289d035a85c89d2eddaae5590a247ce9d6ead9e9a96d417f9c354854fb2d9ed9fcef92c4d9ebf76910b458c110d3bc4bff5289d26dfdcd460563fbc15fb56b1611a565e22bede9be8b5588014e96fcde4651f41938bd6322e7fc68714c9693d31951befc67a8588aa933036d05726ab932d2a0ab7068ee90ce110373f7e6d07de52a828bca370e6321dab74b63c5de4030b6116452c9ec83235014b1ef3c17a04a5de4acff9c272681a923503a438c63674d39a5da9048c54d4ac6e7d7b0fadc38fdab7de194993eb2d95e807dd72a254d5b075ad922296dfdfd32573ee29fb5f56000a5f3e8735f71bb43cc368b01047c29716a092d69f1bd5c4126f35ca1d261793f9f470d2a1dab78d41193fecaac152b585c23d3aff5f010ea0091837447c51ea54c1236d370535e870850f8bab39f21e9668fd2ef5e8d1f640458f64e93860a0dc2bc9d9924e6e3bcadc47f974bd7a5290678d3773b307326b5d4d8cb5045d9e0e4b0df3129922370971b0370b388b8e540fa43bb09f132485b2879eaab5a200924064c7a7436a36f35d83b8287acd8c0c0b41cb7c7752617802ae303cf4ff633cf1cb837433436eb33047600da36732c2d65a05697406b997a4d6004f8ed30e6ed5f052ee6674ceea5ef5995dafe5e3b2fbb84dc6c9391716391b5bfcf28a1f23a6b786d75ec2987e3523ec4c1cecd6a4c18c2498c41d42984b760f4ff91f2c3c74a4291d884010117877a0e2f4d344c47f757f92464ac1b523dcb24aa5924d2727c79dc3c6e4106d1920d0a2bd7dd78b9fba930425d9fd614fe7ffdf0e274a7a2d43a81e1e667988e2df7fb97f3e11fca63b018a0394053544f0a366a83e82ba63b787f1bd106e3c943e7603e25f0fe7b9754ec18eddd9a6c6ef2f4eba41ff17e11b5913221b38ece2380c4c4f7f11c2e679d9bde8370366a117776e9f998f39bdd2c8ef7d64f5d5b8ac51f535381e36d8364607296d14386cb437854634bda0ebfd7c39295d8f846f10021a65249be0714a486fa93ca613e2634c36845e2675e0c2284b9c48168ab6f46dbecf7721d1be3dd613504b654a3384995560072a85413de7a2e8179cfde15b59565793fcb787756371636b9e58f7ee400ae6ad2cc8fc586fad7877e8f0f728347bd475acb806bb1d7446e60a9af5738ed2715f87e7d152fb1ac8110bbe3ca188f7172231078929af981a87d6b04c6d23f920c6a28f6fc414faa24a97a26d3593e906c26c52c8c86771a8c3b32ac1ad2a1092a487c31c28530b7dceb7a2f1672ca69b0124f579601b5e8855ca5bb647d9b0f6a9018e3b93654ba55236ae35470ff85d7792916cb331aec106c8e30949d66928bf1a2adac9af3700d8a3bae7402fc1d8748dc1a45e4f85dac48a06e4a48916af26834b81e5f9992181a33705474b801594e8586ecaf83028b989b60c258a991afd0a0d966d98e691de857e57bd6e274722c365bcd4fc39b53d97f2688e5ce901bfb8b774a0b7cf3d831d796d511ca8d1d25d75c15f5081c08ebadef28495aa0e139b97468259fab5e0d3bf63427daab8e8f886f4e46b06efbaad4995646ed5f147f8c1ea82791a00403ac19a3191a97ced67d4f944da7ed3470070fcece0c54193ad2006c76766ef86dd2df5a1d5bc65310cd62d95315e70c2068c7ae00fa9d88e0e9c12a88746cbaed09f73b635e2768a6754d69ba849273906c4c98caf3ad05c0d27fdc78389e405758d4d17904c691ee6a1b6d63b205283e0be081004556d84dd628d22b590f42fb5f4ad201a4cd1834e2ac6eab0fa03ba35f5986e98e6bd5ad5dfd97b51241b497c49d8ac115217d0b0a8a78e4fa305a6c0059d28667e25c5fea009c99585b16d3fc157f0eb69e05c9f32a3bcc2512f6df8cb229714792aa9db7cb1fb85887f68dcc655d2d3941ffb1a2d6f641f49e779d0865a621a0b169d8d95db342108bee276b1c7675dac0d766d5dbe4889cdcc35eeab912ad73f33e03b8e780d0a8382c84ce0e0a8c3606cd340ffa4b63fa0c4224886d02a6b886214565cb441686cb0f2a8030533b3023c6ee2397f3653ce2dc1fc0a31ddef5970c857993ed3a66b6992212ad40b33a4133729a87d25d6c7dfd33232fb2e79483e0871bbb7bc369cd1b5c2f7b1eb5bf91776d8b8199ccbe1109bb2d348cfd7b8d5599f136833e4e7be5d7ddecc044ee45e089f92894fd16f18c62c687d2910febe43ae8c84768c33aefd723efb36d1fd7d6ff483d33dd1b0e818782be8ad859be9e213bac4a5578f4ac4436a6a75e1d46ee87d30405a1d2e64c82c7d6d451924bc3da6605947863aa51879340ca031d1bde7580ad06ff08f74fa76dd11a8001ba7cea48359825bec31adcb0ca4040f5020f557ae1f6581eac47de45ca3d6aceb38c23903e5479c3cdf67479fb89a2be6e81eef8012a94bbdeb0cd91d9afb3b0f4321a22e2d49d6fba5daf95430a7ab48097b6d4d516fdbd1c06a3d9606253f906baf9642d6c92c366e012df2d1afa75ae6d836d5adc38e8c1df0723b5a01d76be5afac4d557121ea6daf32371edcea4fa2a542a8080230430fe1e9cc4fe3e2658319787af780911c8c834569a3a647130b7a001b88143a541fc5be8dd48d3e04b40d936e14f63a0ee4820d875a2ee9000b24bdff43a463889b427ee90f944e95f55d2c2d5e55be1cdfde67da6fbd2f8802ca6fe19686b7493a51c29f01d84b4d0af660db3097802e2c1127bc093df7ff09571c5e8b8001192f881e281f419fcec805afd6ec8c101d26a1fdc6d3fe2519d40f40febff5eeef56a82eaad7cad81661f3fa453c65dadc8d68b75296f0f4feb35780550c8371a6cf71397cad64ed34c3185423f2e81c1163504a71294d844c08dcaea4acaf4f31e1f965a4a3b98172169bdd820528ffb028dfca0ff64a47de7d0474ad4374871f511a919f4c64efab280aec095d789bd228fa46b1cc1b70ca39dc3aa21a9db1b6b75924c1e657aae55fb114d8ff159746942ddb3e68cd14e54d5f530c7299e2ce77865d28a0718296ac73f2f2f8f5700a4a2e38e6192525866ac4b5af2d50dfef10c3fb6ed3e6a6545af91206fe8fc93af1cb8c115aea6cd67b45e2a1ce446a843569cdacf4f2b4f6cd546d8406e41ea338f26789d7ae0432f005f1ee6cb8ed3359f4ab315e2b5010aad0eef340be977db0af85d2533f742d72b6821ee48cc4aec7121be2410ca79605d7d38ee588f6fd4315631c97bc5b35774541220e37cecd2a31688ea81a6f0b8ad20ac9bcd760b2aace999ab385399fba8b133d6f946b6e00178cea513a7666ec8567006bb47093e1ee04acd3588a93e7533ce1ed825b21d483f27e7c4701692ffb6103018039b1deeb97745cfd67a7d000d3f2fec60a0e8da7f88c705a5af249d6ddf3e784837c5ae9dd0eb56526770b5578034d786177bd4387c65730d3515b4756b26570b6319a90ef512aa6f908ff4741b6ea38a196e920e173818dc411230214a282d4dfb1ff7b22a8dafb5144a7a7c48d2c117da7f2d8042cff22fc6000921e8ad69f4df9baf690b049e0852b117b4515ca1c6d91331819e480a6eeebada31cde459d65b4afda4c1c759afad6487eb82ec4e320fab3855fdb3ce20d3f2b4b12ca571ff01ff6ca713fbf57f8ffdf0c06c1437dd40fda05168b84051ad8796cc7a11d3bbe6c3920e476fb271a79eb61b74dee8e9c1c6152502e2311016b7299f6de67d4069eb850d6abf34adf66380dd01d8b248089e3c1b3df52ead84dcff70e786b729a4ec517e11fec15aa635744b4119609b427b20c3c26a08e520f6c21e3e28f4681adac76028c711e49d1e14f67a450d8740a50ae637bca73f7c19af3193a6f8f4ae94a6fd4804b0dda15e71cec2e7b2b1fbd23b61914c3d11497c71baea71789b556e881b7b799d3eddb6087f83eb3aba1de635c497a830722d303493c9ddc6e63d9c68a6f7d989ecd4d4489e30211bcd049fe92fa6844013f2dbf329fb72f43b32811d9d11db0f6ea08f89bf453e92a535432475fc0ca67ad43b2c3f7c52efca9a8d56751a88692707c7f752136a17d626d05f231f424d9c41f638f85636b212f6f76efdba76de1cce5f5397419b8e9a3fd7b91d34e4018a4b8e0882ef071691e1437b376862c8c2a6f42f807ec6c1af3de5090a037bc85e5626f5f0083bbffcffe3cfef998209b2a2fe85f513944c989f07ec2906352bb1f632b8d4284ec4b58f5fe2ad5fc702be356e1b3221da000a9bab768b692160c513d8426a97883a0fbf62139b2d904e845814e62ca65f512363ee7bac01c953cd0fffac25a6c69fa52bd57551cfdb43d86628a16178f562da1788ac8906d1a97bb6c74bee65aa81bc037ea3de56f0e7308aad030acf776ac29bd352440cfa97b02b5536a0658e749748b31414f86ef492b830c209b2ab9a2c343a1187c11d7d76f71f5143a0af5858d0051a2e92409a6189e7a85d5b97254057807df6c24fb54019f93db78f46c2b0f14682ad30c85479ade27409b9d756b02c16899b4c64ff5008339d0d70ded4ee6898191c1083a177b8dd189d8ea5aa47c211cc5c9b2d4a80cbc897b26cc11fc0d50bb801c296ca5dc5a664fd7b3b052639ed1d0a088b1d616d9e6ce47844493c7fb461d3362ceaf876cf1117f110f9da7991a619295538a9b67fa0433b80dea774522fe5dd553a605d3eedce6d3a8a1d9ba8e2533eb4aa9eda39c47462736157d83506e8fc6e3545866e78085d9cfded2337efe686b90f46c41ce64f0bc6025a9a04dffae3343da2b1e25b2b94260d2103615f438754b1c7d0d8413759e6daa6f04fc67c4ca8aaa056af5dffd7d7b94f2a4b6dfd37881b2f6e75475330fa6e72d565a784d966c0296b5ad2deae7d217559a3e92871e46472c9af98cd17dd0ce818c2ed4bac8a92c145e117a2709331f8efd42e85bacfb90c061cff8cdd351e43f83ea4ed7b52523e3e563dc51d853437618f473a537339646406b9bbb6474d145569ed1f11ae89250f5ba2d62ddc0b5f718ee40fc82110d865590932152ee97330e73b2097c52eac26516cc9bd9a544351efcd22313b18d52c5634bcb36d6dd4dda1e7cf73ce42f076678814aae1c8b6012fd7d94ab0ff352f28f79f24fe0dfc5ed6c8a18558af3a934ca01d41f8f9e1b6a727a11b28798908e150ba280276ded75807c29d8a9f15eb5b8b2a76ab6e343430af6b79ea4b3a45f3aebf729a855cb65a63317acb2c77a23caa4a57bd484988b6e28e0badbbb67162fd2c5fb12ba4061a8d393861611ec994da957b01adfb4238c2201b1921ff4d7a5cb2bff5e37c16d37e1af97cd668c70ea846c57c88bc896ba9232c3aa6a48de7b9a7ef0e68bedcfac0d5f2138e3ca800100a4632a1bcca46e0a7aaef36ecf67e581ff4b0b77b03fbc0191d4eb5ea4cba90e62ad0de2a6c13a3b5a20d16d3378165b5db91d23cebb76934de802df214ff9f3e32a914f822ac960672cb3de53474039c23a16675b89f9ae751e390d41bbabefc547174922b210df0e883a535928ecfccf2dcea4459282eae57c2ab7b434cb5174d9c4e1470b083fb932f04bbe9f875e2f2dd5ad7011b864dd75c79c6073c85c74049f6ef70d6579b058e898f8b7739da1313d9217667b082559b6c4998f8bb815cef9f8d1314e16125830ea6cda8efea905f62d36ebb51df3e4716c4b33594610bc10ca933442c3637ebb063e057b5a872d08c8e9011b39d50e74653b33b579517621e9ff31959bfef59d48b309b16e82b61a349b448d6350b50cc0ae199a0b75c5dcf63dc3c9892c3faaec6b64a78e45b7b0a6632ec0d28f1a9812c5811a012cb7641e86cea83250c2f98a7d9c44589cebc1ca64fd2e8e30b2f9fa26fc5d8e203f6595b9321f0d8eb43b298a0faba5e3396171e3c53403dead129d447fb31df871c7625385ec1c3d599c54b569caa18e02d7fe2f28225abc22abeb8556437485e6eae800f7adcd82ad022d059fc451f7cc601e482299fad0392cc299047db28f17fc7e24b936c27def510e5a2b99c239945d4b53107fe1f6083bafbc71c372cfac3e972b91b832dd492039d98486df3ecd1c76a6a6f65ed237c184fec2c0922e9c51740b5b1e3a2f5017ba409cd470d5b245bb5b8dd27b9628332032f6d69e18ec207bef4a585c02f629f990f9799ebb097b64c073983ab827778cbfd70bc53a6f9594b94334eb669e32372dfa78035307e3439b7e36d4d231a851d020b03e4cc7e7aec3e51431530575391926f0f9398d01ffaf0e67e5f064e0843314a921b3afb9b3dfa14ecc10351aad578b6424e7f5c30c8fa13e96c53cae7f6888a1813b70d64f3b403c0fb1baca77d1bbaacbedbfae3d6d13cd9e20a7c9b8a03244648d18447cb02654104a0d0166169e35e102babc4c6f8be6b30e9d051f11c083154907d993c48e6fc8f11380ee87389f9ed3a503e2b83fee8ff81a4e4e73b6f16416cf9ce1619f0e07fc37a7bad1d05ee6f668c0c20bc4ee5c004e74c4934dd2d819b8dc5d1f61de93c40155f654d02136475e5dbc2fe2919035e5bad5c5d119cf987acb4529fd29f01531ff7731bb1e2759f6ee527dae0713f3032b0bd9f2534e3ebe485952584e1a8917508c227cb13e4a6ff280a4efd3c4c2e814e169d4dc7274637eec4bd2c83f861619b79aaeab973bfde9505810ab9f60cd683bbbf8863ddd185654e3dc9e3fc8b3376cee65acafd551d046cc953f5c8d048dced9b185a9096683a324abdd0ccb3ddc08d936e5da07b0040a1ae6c9400383331cb3bc6a81a78d0d3ae6415236e5c12bfc55e495f9e9c85861311c01d45c784a41f7496b82bd4f82c48ec8beb725fc265ca7f6f8a64301523bcfda0bd613c384ba6a91dfc1c80053b5364a564fc3aaa46cd0f1c459c06239488e38c568b8e09678c18011fece89457321aa4fd326eecf5231715a43cd43579871a86341f71638e8fa01454c1b5990b19955fcf9e77e5ace1e62d5840a2d12fdbb641209137c593f795c3815559ee0b8ce0ff24dc1b4a5b82c63825bb2c146daf055f21f636f0b2bf7a3205175e3622446e542f9acfc46bfd0b99707ccff8f27c860615dc7780f2ba52a54e77e22dcd8af97d780921b5a4bb720260138595d99d09a59c4109f7407e6d00d9914ef5d399354715d7226cc17354b2e327333262978bdfd79e752d0e8bca3142fc59281035770a7bb13863953916c91d68db628d921533c45b15e48631abfd9f6ad76bc0d5dd62d49012f05fad2a57362a908ff39dc3933adfe0671144783ba530a95505858e99ab63a81585ebfaadd05ddd9bceb38d4dd5d3c26165cf04b862520e617c5ff91eb5a16409e254249fb695fe6aea4034fd512d2e9faff174d1a4b29212cf13672f42fac39f356e6926f26b21a3e18987da4e4709445842540a7fda565b8762338122884f85975516676b4640333410e62a55109d115597771371005948ec7450be12f06166ffd81c9aa4f2c4dc7bd466a2f0806db47388eaa6c341d4e0dc78c998c9f6d15c0c9cd931c4f3f76b4d1de89d14dd412126c1ca12f50ff6035d2e561f0c5e6622c7db61bf524ffde09d5e0b69f62b541767bc929c7a715d08bfbdf823492d5fb4178d3511cec2454e97ddbb5968fedd91bfda2b4fd97bc50c2729004fe5e422d90f34ae191623b91d4b995dd0a830eba41fd5ebe34eb38abd5069274cbaa6acc438063781521c59dbe30a0a805648075708dd705f90d0ec1422b9bf817615a823ba286d1e13bb9f13d890d0f672c36e05ffcef19a8a9addacbbf329de80e063e4892087c4b4fc24018200c221583c8099265d9abfcb57751546428f10f86cdd8b75ee2bc7befcc106ed908ca3495d7fbdd9cc9aa542ba571302ffcfd7e6ca8545385cdc2013c7b46150457dbf54da8349c27d0c56f763f9cf08aaf7f6c2f220d9f71f504586fe73a44b9debd63bea13fe35094223f2b75161535ef6ac81c058dc76413c029d94a16046cb84dbfa444e605af4cb3fa3eaea8b1f5011d411f4784e5a11a77a61ed4631d700a3cf1a9f9032791621d0aa08a268e123cfb31509ccff0ba8205cec0cf21944fb3758fe93cf47f583e6f08da698a5b2aa909399ab1710aea3a265cc53bc4ede821753fd3ca49303ef1bf6cbc238b055f6e7915280ccfea01bf37b9185c5cdbd7152ba131c12ebba689f74a77f07bf6a15c37a2e8b931bc402f3bff6d7a4ed9b78d9cb2e0959f74bc48aa76f6030974864e0f28c84b66791d11fa0f4924bfada01e765ac7e0358a56d3d2338795e3c13a9a23f6b976c7efe17f7c8dd33457efc34b168dcb89548f8484d5f66956bd18c30f9a28286dafc430bbbeac730ee4f63ec270bdd191964668254c59078df3962e7d9ed547e642773e8a026957182fd4c7a5532413e22967d238551228d8a8ef9612fce103468ee7337cae521dc3182a7f24867256865ef91b6e0ddf5897b11fa8f7bb697d47268127a14af80fb16c1aa2771984221fa0541caa39bdbf75a657ccbb5fe885a6569ecfa5f2db8e41acadfc256bff335c074bc75ab6ed29d989e77723e0918c108895cf2bc6d7b12902ed7a87571889638069acf9e0bfbaa3cff1970e3d509b63dc4196a6b023277e58fea82fd7211961984d4b7562d79c11b06d82c0b36032e74b0b11b784fa2685cf02107b0eab1a5797ce65a912a55802843616f8acf434d2b6a6181c4ac4715acf92f8f16c5cbeb1b052989bce99e407c2f8f5424ba2bad9d05c8c33092463755dd9eede029a88b85ef855bcf6a9c2e5a28f2f5fc5a8265405d3359f0aec21f79a21526a4066ea9282e329a29bd44ce47dce1c3a777b538c7b7c3278e2ff6a11c6f29b7e7640bec2ee938665e0513869d38792c81891d91a3aadf8d6941fb2e1f9c5e319bd820fa1e5469f929be57da7e161b013b048a7179a2186b95cf9d721bb52cc6a44e27c580873dd6515494eb21af637167e54c1b9a290b5b4949536a8c7a6bf36a6e276bdebf2ec48cd961c1774211c5ea5258ad681cda21748f6a1b3f2efc79331dd57e42f52c1dd5382676c9f46f26ff7a68e6db88a425438ca41cbf72a855f7345e27a1d4596a5677dcc838cbe9d0dc9abd609812ba132a62810d88fc210229f3636ba2e7f5ec2ea143611824e53f17412cb104a9fe4b1e3ba864816ee9d8ff325ae25a5ff8fd5e29b87a3f832e154946ef072c11b3eef03850f8f4a42cddc665380a49df7ff989b7ed9ba8e1c8e7532998f47bbc707cbe6bcec2a01b8a40b71ad6bf33a71e370023bc041d96f4a69204ed332a433957488f845dc48988aa745e62154448233226b0564eb735fe5e8ee883199ee27ea0f6255a1e0645f91c7b3f4af978c14eca9a246fe64cb3b3fd38e658233e022d826964a1c43228b88299a001edb8d538e71aa7616da1c8580ae738b87e2cc72a85c6f4e735519e0be804f085010eda6c93a943704585d3b9dba19774d45da76d04910ceaa96746bdead470e25f68352f8f2e144979a74daa36a4cf2296f9596621254c85d69a05239e6b2e4d8b29d480a963b1686d5bd1f47e064bda8cc57ffcd3923492b49f2c1fcf88ecbfa5ec566172177d90a1128c0fd713ff0e83a3dc41834bd308b4b3006ffe0ed2d2e8b8e0164858a2e9d6003c83526fc83c2dd787688364535df742b7da045ca1bde43b8a9194b43ba6ecda5848ce55fbd4a66003dd7ac0d3e8cece4308109c1777a89d010bdfb5d22dc15f1034065bb3bb4f847b8fb867e141b211c8dcb8778773284eb02a3b0503a98e67d97b80e4ba1f98fce86e38ed013e908d90a93ded6fbf19007cbbd56dcec0648336670c0509a4bcd9d5240f8aad0fb382bda154d88d5d411b79d45e7db783d8648da511aa45d832a7bf3f0de7c1a7174ee337432e0c9ba75235e4ce4d3dec681c4e70ecdd27a7d79989ad2dfe8df01251fa728b403ae25eb02f1b02d01b5e41fcdd708e749c9e48e30130f0bc67944117457a78fcb5c9a29696fe98cd56ad8d9c2f81eead7c28b2a03b169a71a63c833252f9f9ee1a6d3584abbfac5b065ac39071ca3619cb8be930fb738b008444ed90fbccf3f1c4f268fb6c038be872b7c5f6254766271e76093631553b9c2b3cd0f34917a83970e72e498d780f78632545a929e457980251bfc1797540c2215ab028fd367f3ac72c13bd55d38dfbf1a3b1dfe95b6453e48746427d936ca43120c9c9782c767b04092147d8cbbb3223f5343457039a22982fdafa5c6663a2031a9dea6021ba20934cfd6c1e14544044c12a2cbd5762638f5d7f0bb19cd01cfc5a38dc11abac2c57c1ec1310cb7812fa498ca8a22846dfe79a4ba2ece4cf40b9999bf3d10201dd49e2173ed4f2f4e60426c4900373d294b5e667a6b7dd72f06e820a8186dba5da442c8f5306227e1300e3859838dd6edfa76ae30cb04d9c5614dd2ea0b669f1f59e4a80a0ed09c55311c2c8f34f6bbb32039e9c9a2002d89dc8efd341f39815998a3365eee7b296d404c9a55f72e6d0efadfefe216a109b1f79ab232982eb2752283dbc5aca4f0fe266a2c31e280c0bea230703beeb75a44c436defd66bfb0ac6c287a9ab8d62712726d1e163bfc254e9678c3867c0ac1696c4107b032cd1140e089aa3eee00b1796aa611d43e2360ce9e14d8a54552e717576298d23401a102a65f1d8f7c15e41938deeb0a2a0e16ea1782677f71c8746bb6d92c34bd8f64253a78c12e2081bd1e3311152c813aa2ec116f9221a3cc09aa5a5c94355f20ad69e7a8c5d244b0014d577bfb1ffba9aac56af98fdd07cc5f3d81a1be5aef31b0e875472f5ba2db7b0f6d995dec849c1217de0e1b938bf7c426c3e3cd629b82b6325a94a7298628acd395a7f753a71cf3089d041599988af9d12542307e7a03b9d935fe1e3114bda822ab665255c837cbf773e5c674290e3e6d35873a23ade76552d5f66603640e880869496934a230a9ba37aa7bef028aac9fde21254ba61aa04e8ad31d50521f28ead013feb169be96deb08745e8ad2f74f0ec70a2567e49668f26c96e51c008cdbc8a780c3e7a198ef2a3c8dd64eaeaf4de5bdc57ed7f737ee721b2138348597c7bb0e2976953651032acd7bfa72ab7ba17db28f84b7fb0af612bf673ecda824cb44353796baacaf4dd89e9270ab577c11a7d5000320333ef4d5b1db4381c3282b5fb8c0d135ec28d2abe5c3d006d8fd33df569ec961a77f1aac1b89868f9083c561bfb36f11feb84b076632b8929722ec4cf15a0adb8d13b3104b377ac578b5945f6a9fc7d51d86ac860aadc8cf64421051a0d38cd38cd320eac24b8b5c5366de91abf5b5c06451fb5f5220f8293f3b57d9bdb4e56890006396dcf2b91a927fa223a60296441fd1d0bba13946e97029b6ee9c76f39d9fa369151c6e54b361b64a3b47a6aa98de44aa38d225dcf19c2d0c498bb259a9113a7770bd83c67c5b84437febeb3ebf8f8713a47333d8ee19307a80d4f7421a8b6697d7cc3b1ad622836836fe475247509e0276cccefc07474969fdfae7570edc1ef1f7a7456e667535fce0b9b2691d7216bb2f18a52ce10093367d39ce61dabc08f4e50452bffc9bb32ad4f1629501fdb32db459f79209a4e35e12ad2020c5661da118dd2e28fd16e7be01d0349a1bd846fb1a9a5f512023974898af02872027982186bb51797d88273a6b004fc10234d0c75c5b9a740418b8266b22e8314a6dea7bc739a85c814ccc0b0a496d9206175f41141e93d19f54540fd89ca8bfcee2478c969f3027aec374581c9803ee44e965deac2c237781245b143b3062a7ffe7e0b4ae9f1708717712108d6516f98aee9a97c37210e9fd1b38bfd88bd7f2ad2b7f95bc9f942cf5ab4264bb9d997528f7cc4c4e189144213559d5558e7f84c3960cac6d25d2b77e94db07c424e847188a5851701186a3daa7aeffda655f8bf2e2941d395a19d267f861c39ac53d75a385981718b9007dcc7eebe831110af0b40993a9dd2ff2912d63eac911efaec04a6314d0894e7ef38d7267b4981d4e3fe2eeb2665e8fdaba2a3021351ee52dba37ac815e67531571343768ce9c29992948691c689391a4d079394aa88c43a013d4c1763e77359f28338b28b08521dfb54a5d0c06e940d8276fd82b26e0214712e2dacb7b261b47f25dba1418bc8b531f01478501862b95b77495316589535171cbb3b8442c5b53f9721ecaf3acc1a2fea4fbe31a254804c565066b1c71d29137ec83d88b7f7950e7370e0f4d20cf190b1f7a693bc2884e13819e7a2bf838dd5181d5a4a2ea7e90953539d88b993754aed515181c6199a2d5395da453aad8474f12f771760ff9d939d9f488bc36ce5703ae9766685816234451d37bf50989511934179ac4f30ac9feadc40cceca5b6d225633235cf55c5bd9e32541368d97e6136642034c854effde822f2428c460bdd57cac2301b6193de87786671b1856d4c03aa04bb655118590f4feb1fa689408a9f662a0ab5b10a1825757cefb69704a8c5c2a618eecce14ecf33b0ec5711bf8eda110259b33f6033b9d6b456735a207f63f9a7de72a8c8fbaf5d06d2fb540955de344fa1c679013b5c6a3cf51f848f1aa4fe950f6b2852037660cad560d148a739e6a2539b66242520bdb1d00ccba1e7942d8ac08b292e603045f53537a29511e23182cef88949cfc2e0c24af2181c9d42e9cacecf2dcb68adc1e32a9e8dfb8ac5961c8fe0c20f7f7b2437e01dc5a4bec4e51ef270280d112b783dcddb4e93098f49011d7a443505195586b179265f8fce801e2fa958ff84c39fe2873e157a5f8d4fc62c74a3f3de9a42ae40ce2c57c642ba44cfba65a143c7cf6d4ce1eeeafd99f8f1b0baa5de1b9abd7b03618e30cc615745019088bfb6ecb74c4cccf367a1dcf9f579859f5abf8580f1ea414bf1d4187c4b7259895d38bd0f8e14544266e9b95d2231e7e2954fd89416651a9f054b6162779c2a45bf478b46101ef4be112d38dbc113e7c52738260e2e19ca05c9d0010035e5c2e53f1364b896dd83048b10f1f15cff10253173c544a443259fe1b98424115502f424eb8d69fbd8abfb74610687a406ce375cf500cb8dec45da4318dbba74072c4bed7dc4feb4000ed0a678bf43076655a14bc936be2121ba7070eb5b91617f9d6945a6495e5bb648e9d35f0f3e123b326f8f3e330a7e1ba2d403c6b909433592c6e7f8ba7f8266c58122f9bca1a550de3936eefc588d56728a8b5fac5c76d51c51d81941cde09b5e8b6438518508a4b36bb23be136a183399a26a979fabc6c33416b962eebdd52dfa7330951220c993d8a11c5d1998a77e486b889a5b155803a845c3a5bcfed9fc6934db6e80c54f95e8d3c98f52674cf960b7131</script>
  <div class="hbe hbe-content">
    <div class="hbe hbe-input hbe-input-xray">
      <input class="hbe hbe-input-field hbe-input-field-xray" type="password" id="hbePass">
      <label class="hbe hbe-input-label hbe-input-label-xray" for="hbePass">
        <span class="hbe hbe-input-label-content hbe-input-label-content-xray">该文章已加密, 请输入密码查看。</span>
      </label>
      <svg class="hbe hbe-graphic hbe-graphic-xray" width="300%" height="100%" viewBox="0 0 1200 60" preserveAspectRatio="none">
        <path d="M0,56.5c0,0,298.666,0,399.333,0C448.336,56.5,513.994,46,597,46c77.327,0,135,10.5,200.999,10.5c95.996,0,402.001,0,402.001,0"></path>
        <path d="M0,2.5c0,0,298.666,0,399.333,0C448.336,2.5,513.994,13,597,13c77.327,0,135-10.5,200.999-10.5c95.996,0,402.001,0,402.001,0"></path>
      </svg>
    </div>
  </div>
</div>
<script data-pjax src="/lib/hbe.js"></script><link href="/css/hbe.style.css" rel="stylesheet" type="text/css"><link rel="stylesheet" href="/css/spoiler.css" type="text/css"><script src="/js/spoiler.js" type="text/javascript" async></script>
      </div>
      
      
      
    </div>

    
    


    <div class="comments" id="SOHUCS" sid="bd3947fa86505dfb0031059a8e17b22c"></div>
</div>
  </main>

  <footer class="footer">
    <div class="footer-inner">

  <div class="copyright">
    &copy; 
    <span itemprop="copyrightYear">2025</span>
    <span class="with-love">
      <i class="fa fa-heart"></i>
    </span>
    <span class="author" itemprop="copyrightHolder">Xiaosige.com 版权所有</span>
  </div>
<div class="wordcount">
  <span class="post-meta-item">
    <span class="post-meta-item-icon">
      <i class="fa fa-chart-line"></i>
    </span>
    <span title="站点总字数">435k</span>
  </span>
  <span class="post-meta-item">
    <span class="post-meta-item-icon">
      <i class="fa fa-coffee"></i>
    </span>
    <span title="站点阅读时长">6:35</span>
  </span>
</div>
<div class="busuanzi-count">
    <span class="post-meta-item" id="busuanzi_container_site_uv">
      <span class="post-meta-item-icon">
        <i class="fa fa-user"></i>
      </span>
      <span class="site-uv" title="总访客量">
        <span id="busuanzi_value_site_uv"></span>
      </span>
    </span>
    <span class="post-meta-item" id="busuanzi_container_site_pv">
      <span class="post-meta-item-icon">
        <i class="fa fa-eye"></i>
      </span>
      <span class="site-pv" title="总访问量">
        <span id="busuanzi_value_site_pv"></span>
      </span>
    </span>
</div>



<div calss="ypy" style="text-align:center;display:none;">
    本网站由
    <a target="_blank" rel="nofollow noopener" href="https://www.upyun.com/?utm_source=lianmeng&utm_medium=referral" style="border-bottom:none;">
        <img src="https://static.xiaosige.com/img/ypy_logo.png" style="display:inline-block;margin-bottom:-7px;height: 25px;-webkit-filter: brightness(.8);filter: brightness(.8);">
    </a>
    提供CDN加速/云存储服务
</div>


  <div class="beian">
          <img src="https://static.xiaosige.com/img/gongan.png" style="display: inline-block;vertical-align: text-bottom;padding-right: 6px;"><a href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11011502004362" rel="noopener" target="_blank">京公网安备 11011502004362 </a>
    <span></span><a href="http://beian.miit.gov.cn/" rel="noopener" target="_blank">京ICP备2020038036号-1 </a>
    <span></span>
    本网站由
    <a target="_blank" rel="nofollow noopener" href="https://www.upyun.com/?utm_source=lianmeng&utm_medium=referral" style="border-bottom:none;">
        <img src="https://static.xiaosige.com/img/ypy_logo.png" style="display:inline-block;margin-bottom:-7px;height: 25px;-webkit-filter: brightness(.8);filter: brightness(.8);">
    </a>
    提供CDN加速/云存储服务
  </div>


<link href="https://cdn.jsdelivr.net/npm/aplayer@1.10.1/dist/APlayer.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/aplayer@1.10.1/dist/APlayer.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/meting@2.0.1/dist/Meting.min.js"></script>
<meting-js server="netease" type="playlist" id="2228518256" fixed="true" autoplay="false" order="random" lrc-type=1  theme="#eb7aab"></meting-js>


<div class="bg-box" id="bg-box1"></div>
<div class="bg-box" id="bg-box2"></div>
<style>
.bg-box {
 background-repeat:no-repeat;
 background-attachment:fixed;
 background-position:50% 50%;
 background-size:cover;
 position:fixed;
 left:0;
 right:0;
 top:0;
 bottom:0
}
#bg-box1 {
 z-index:-998
}
#bg-box2 {
 z-index:-999
}
</style>




    </div>
  </footer>

  
  <div class="toggle sidebar-toggle" role="button">
    <span class="toggle-line"></span>
    <span class="toggle-line"></span>
    <span class="toggle-line"></span>
  </div>
  <div class="sidebar-dimmer"></div>

<noscript>
  <div class="noscript-warning">Theme NexT works best with JavaScript enabled</div>
</noscript>
<script class="next-config" data-name="changyan" type="application/json">{"enable":true,"appid":"cyvSPOTJq","appkey":"4436699688bbb9caa6e8826551a7c0f7"}</script>
<script src="/js/third-party/comments/changyan.js" defer></script>
<!-- 提示信息 -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jquery-toast-plugin@1.3.2/dist/jquery.toast.min.css"/>
<script src="https://cdn.jsdelivr.net/npm/jquery-toast-plugin@1.3.2/dist/jquery.toast.min.js"></script>
<!-- 樱花特效(https://cdn.jsdelivr.net/gh/yremp/yremp-js@1.5/sakura.js) -->
<!-- 下雪(圣诞) -->

<!-- 天气 -->

<!-- 文字闪烁（变色） -->
<script>
function magicColor(mode,t){
  t=t||10;
  let elem=document.getElementsByClassName("magic-color");
  if(!elem){
      setTimeout(function(){
          magicColor(mode,t-1);
      },400);
      return;
  }
  if(window.mcHandler==undefined){
      window.mcHandler={elements:[]};
      window.mcHandler.colorIndex=0;
      window.mcHandler.run=function(mode){
          let color=mode=="random"?("rgb("+Math.floor(Math.random()*256)+","+Math.floor(Math.random()*256)+","+Math.floor(Math.random()*256)+",1)"):["#CC0000","#9999CC","#CC3366","#669999","#FFCC00","#00CCCC","#CC00CC"][(window.mcHandler.colorIndex++)%7];
          for(var i=0,L=window.mcHandler.elements.length;i<L;i++)window.mcHandler.elements[i].style.color=color;
      }
  }
  window.mcHandler.elements=elem;
  if(window.mcHandler.timer==undefined){
      window.mcHandler.timer=setInterval(()=>{window.mcHandler.run(mode)},500);
  }
}
magicColor("random");//random为随机颜色，否则为固定颜色随机；上方“闪烁（变色）”字样为固定颜色随机
</script>


<!-- 一言API -->
<!-- 现代写法，推荐 -->
<!-- 兼容低版本浏览器 (包括 IE)，可移除 -->
<script src="https://cdn.jsdelivr.net/npm/bluebird@3.7.2/js/browser/bluebird.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/fetch@1.1.0/lib/fetch.min.js"></script>
<!--End-->
<script>
fetch('https://v1.hitokoto.cn')
  .then(function (res){
    return res.json();
  })
  .then(function (data) {
    var hitokoto = document.getElementById('hitokoto');
    if(hitokoto){
      hitokoto.innerHTML = "<i class='fa fa-volume-up magic-color' style='margin-right:6px;'></i>" + data.hitokoto + '——【' + data.from + '】';
    }
  })
  .catch(function (err) {
    console.error(err);
  })
</script>


<!-- 代码块自动隐藏 -->
<script>
$(function(){
    const CODE_MAX_HEIGHT = 200;
    const containers = [];

    // 展开
    $('body').on('click', '.js_unfold_code_btn', function () {
        $(this).closest('.js_highlight_container').addClass('on');
    });
    // 收起
    $('body').on('click', '.js_retract_code_btn', function () {
        const $container = $(this).closest('.js_highlight_container').removeClass('on');
        const winTop = $(window).scrollTop();
        const offsetTop = $container.offset().top;
        $(this).css('top', 0);
        if (winTop > offsetTop) {
            // 设置滚动条位置
            $('body, html').animate({
                scrollTop: $container.offset().top - CODE_MAX_HEIGHT
            }, 600);
        }
    });
    // 滚动事件，触发动画效果
    $(window).on('scroll', function () {
        const scrollTop = $(window).scrollTop();
        const temp = [];
        for (let i = 0; i < containers.length; i++) {
            const item = containers[i];
            const { $container, height, $hide, hasHorizontalScrollbar } = item;
            if ($container.closest('body').length === 0) {
                // 如果 $container 元素已经不在页面上, 则删除该元素
                // 防止pjax页面跳转之后，元素未删除
                continue;
            }
            temp.push(item);
            if (!$container.hasClass('on')) {
                continue;
            }
            const offsetTop = $container.offset().top;
            const hideBtnHeight = $hide.outerHeight();
            // 减去按钮高度，减去底部滚动条高度
            const maxTop = parseInt(height - (hasHorizontalScrollbar ? 17 : 0) - hideBtnHeight);
            let top = parseInt(
                Math.min(
                    Math.max(scrollTop - offsetTop, 0), // 如果小于 0 ，则取 0
                    maxTop,// 如果大于 height ，则取 height
                )
            );
            // 根据 sin 曲线设置"收起阅读"位置
            const halfHeight = parseInt($(window).height() / 2 * Math.sin((top / maxTop) * 90 * (2 * Math.PI/360)));
            $hide.css('top', Math.min(top + halfHeight, maxTop));
        }
        //containers = temp;
    });

    // 添加隐藏容器
    const addCodeWrap = ($node) => {
        const $container = $node.wrap('<div class="js_highlight_container highlight-container"><div class="highlight-wrap"></div></div>').closest('.js_highlight_container');

        // 底部 "阅读更多" 与 侧边栏 "收起阅读"
        const $btn = $(`
        <div class="highlight-footer">
          <a class="js_unfold_code_btn show-btn" href="javascript:;">
              <span class="btn-inner">
                阅读更多<i class="fa fa-angle-right fa-lg" aria-hidden="true"></i>
              </span>
              <div class="btnbg-x"></div>
          </a>
        </div>
        <a class="js_retract_code_btn hide-btn" href="javascript:;"><i class="fa fa-angle-up fa-lg" aria-hidden="true"></i>收起阅读</a>
      `);

        $container.append($btn);
        return $container;
    };

    $('.highlight').each(function () {
        // 防止重复渲染
        if (this.__render__ === true) {
            return true;
        }
        this.__render__ = true;
        const $this = $(this);
        const height = $(this).outerHeight();
        if (height > CODE_MAX_HEIGHT) {
            // 添加展开&收起容器
            const $container = addCodeWrap($this, height);
            containers.push({
                $container,
                height,
                $hide: $container.find('.js_retract_code_btn'),
                hasHorizontalScrollbar: this.scrollWidth > this.offsetWidth,
            });
        }
    });

    $('.line-numbers').each(function () {
        // 防止重复渲染
        if (this.__render__ === true) {
            return true;
        }
        this.__render__ = true;
        const $this = $(this);
        const height = $(this).outerHeight();
        if (height > CODE_MAX_HEIGHT) {
            // 添加展开&收起容器
            const $container = addCodeWrap($this, height);
            containers.push({
                $container,
                height,
                $hide: $container.find('.js_retract_code_btn'),
                hasHorizontalScrollbar: this.scrollWidth > this.offsetWidth,
            });
        }
    });

    $('.table-container').each(function () {
        // 防止重复渲染
        if (this.__render__ === true) {
            return true;
        }
        this.__render__ = true;
        const $this = $(this);
        const height = $(this).outerHeight();
        if (height > CODE_MAX_HEIGHT) {
            // 添加展开&收起容器
            const $container = addCodeWrap($this, height);
            containers.push({
                $container,
                height,
                $hide: $container.find('.js_retract_code_btn'),
                hasHorizontalScrollbar: this.scrollWidth > this.offsetWidth,
            });
        }
    });

});
</script>


<script  type="text/javascript">

layui.use(['jquery', 'layer'], function(){

  var $ = layui.$,layer = layui.layer;

  <!-- wobble窗口摆动特效 -->
  


     var wobbleWindow = function(object, params) {
          var canvas,
              ctx;
          var mousePos = {
              x: 0,
              y: 0
          };
          var isResizing = false;
          var delayId = 0;
          var canvasContent = {};
          var points = {};

          var settings = {};
          settings.name = 'wobblew'; //name
          settings.position = 'relative'; //relative or absolute
          settings.depth = -1; //depth for zIndex
          settings.overflowX = 'visible';
          settings.overflowY = 'visible';
          settings.offsetX = 0; //+ or - value the size of the div
          settings.offsetY = 0; //+ or - value the size of the div
          settings.moveTypeIn = 'move'; //method points follow the mouse
          settings.moveTypeOut = 'wobble'; //method points go back to init position
          settings.wobbleFactor = 0.95; //control the wobble effect
          settings.wobbleSpeed = 0.1; //control the wobble effect
          settings.moveSpeed = 6; //control the move speed
          settings.lineWidth = 1; //lineWidth

          settings.transplantLineColor = false; //true Use Object border-color
          settings.lineColor = ''; //no value = no line. Use hex/rgba values
          settings.transplantBodyColor = true; //true Use Object background Color
          settings.bodyColor = ''; //no value = no body color. Use hex/rgba values
          settings.radius = 50; //
          settings.pointCountX = 7; //quantity of points horizontal. must be an odd int
          settings.pointCountY = 5; //quantity of points vertical. must be an odd int
          settings.movementLeft = true; //enable/disable movement directions
          settings.movementRight = true; //enable/disable movement directions
          settings.movementTop = true; //enable/disable movement directions
          settings.movementBottom = true; //enable/disable movement directions
          settings.autoResize = true; //if true size will be automatically adjusted
          settings.debug = false; //enable/disable debug mode

          // ---
          if (params !== undefined) {
              for (var prop in params) {
                  if (params.hasOwnProperty(prop) && settings.hasOwnProperty(prop)) {
                      settings[prop] = params[prop];
                  }
              }
          }

          // ---
          if (!object) {
              throw Error('\n' + 'No div element found');
          }
          if ((settings.pointCountX % 2) === 0) {
              throw Error('\n' + 'Param pointCountX must be an odd integer');
          }
          if ((settings.pointCountY % 2) === 0) {
              throw Error('\n' + 'Param pointCountY must be an odd integer');
          }

          // ---
          HTMLElement.prototype.__defineGetter__("currentStyle", function() {
              return this.ownerDocument.defaultView.getComputedStyle(this, null);
          });
          // ---
          function init() {
              canvas = document.createElement('canvas');
              canvas.id = settings.name;
              canvas.style.position = 'absolute';
              canvas.style.zIndex = settings.depth.toString();
              canvas.addEventListener('mousemove', mouseMoveHandler);
              canvas.addEventListener('mouseleave', mouseLeaveHandler);
              ctx = canvas.getContext('2d');

              // element.insertBefore(canvas, element.firstChild);
              object.appendChild(canvas);
              object.style.position = settings.position;
              object.style.zIndex = (settings.depth + 1).toString();
              if (settings.overflowX.length > 0) {
                  object.parentElement.style.overflowX = settings.overflowX;
              };
              if (settings.overflowY.length > 0) {
                  object.parentElement.style.overflowY = settings.overflowY;
              };
              if (settings.transplantBodyColor) {
                  if (object.currentStyle.backgroundColor.length > 0) {
                      settings.bodyColor = object.currentStyle.backgroundColor;
                  }
              };
              if (settings.transplantLineColor) {
                  if (object.currentStyle.borderColor.length > 0) {
                      settings.lineColor = object.currentStyle.borderColor;
                  }
              };
              canvasContent.elementWidth = object.offsetWidth;
              canvasContent.elementHeight = object.offsetHeight;
              // ---
              resizeCanvas();
              addWindow();
              animloop();
              // -----------
              if (settings.transplantBodyColor) {
                  if (object.currentStyle.backgroundColor.length > 0) {
                      if (object.className.length > 0) {
                          object.className += ' wobbleTransparentBK';
                      } else {
                          object.className = ' wobbleTransparentBK';
                      };
                  }
              };
              if (settings.transplantLineColor) {
                  if (object.currentStyle.borderColor.length > 0) {
                      if (object.className.length > 0) {
                          object.className += ' wobbleTransparentLine';
                      } else {
                          object.className = ' wobbleTransparentLine';
                      };
                  }
              };
          };

          // ---
          function resizeCanvas() {
              canvasContent.width = canvasContent.elementWidth + settings.offsetX * 2;
              canvasContent.height = canvasContent.elementHeight + settings.offsetY * 2;

              if (settings.radius > 0) { //round,  ceil
                  settings.pointCountX = Math.round(canvasContent.width / settings.radius);
                  settings.pointCountY = Math.round(canvasContent.height / settings.radius);
              };
              if (settings.pointCountX % 2 == 0) {
                  settings.pointCountX = settings.pointCountX + 1;
              };
              if (settings.pointCountY % 2 == 0) {
                  settings.pointCountY = settings.pointCountY + 1;
              };

              points.spaceX = Math.min(canvasContent.elementWidth, canvasContent.width / (settings.pointCountX - 1));
              points.spaceY = Math.min(canvasContent.elementHeight, canvasContent.height / (settings.pointCountY + 1));
              points.radius = Math.ceil(Math.max(points.spaceX, points.spaceY));

              ///--------------new1------------------
              canvasContent.left = 0;
              canvasContent.top = 0;
              settings.canvasWidth = canvasContent.elementWidth;
              if (settings.movementLeft) {
                  canvas.style.left = -points.radius + 'px';
                  settings.canvasWidth += points.radius;
                  canvasContent.left = points.radius - settings.offsetX;
              } else {
                  canvas.style.left = -settings.offsetX + 'px';
              };
              if (settings.movementRight)
                  settings.canvasWidth += points.radius;

              settings.canvasHeight = canvasContent.elementHeight;
              if (settings.movementTop) {
                  canvas.style.top = -points.radius + 'px';
                  settings.canvasHeight += points.radius;
                  canvasContent.top = points.radius - settings.offsetY;
              } else {
                  canvas.style.top = -settings.offsetY + 'px';
              };
              if (settings.movementBottom)
                  settings.canvasHeight += points.radius;

              canvas.width = settings.canvasWidth;
              canvas.height = settings.canvasHeight;
          };

          // ---
          function addWindow() {
              points.pointHolder = [];
              // ---
              var point;
              var flag;
              var i,
                  l;
              // ---
              //top
              flag = true;
              for (i = 0, l = settings.pointCountX; i < l; i++) {
                  if (settings.movementTop) {
                      if (flag) {
                          point = addPoint(canvasContent.left + i * points.spaceX, canvasContent.top, 0, 0, 0, true, points.spaceX, 'P', settings.debug);
                          flag = false;
                      } else {
                          point = addPoint(canvasContent.left + i * points.spaceX, canvasContent.top, 0, 0, 0, true, points.spaceX, 'C', settings.debug);
                          flag = true;
                      }
                      if (i === 0 || i === l - 1) {
                          point.color = '#00FF00';
                          point.movement = false;
                      }
                      points.pointHolder.push(point);
                  } else {
                      if (i === 0 || i === l - 1) {
                          point = addPoint(canvasContent.left + i * points.spaceX, canvasContent.top, 0, 0, 0, false, 0, 'P', settings.debug);
                      }
                      points.pointHolder.push(point);
                  }
              }

              // ---
              //right
              flag = false;
              for (i = 1, l = settings.pointCountY + 1; i < l; i++) {
                  if (settings.movementRight) {
                      if (flag) {
                          point = addPoint(canvasContent.left + canvasContent.width, canvasContent.top + i * points.spaceY, 0, 0, 0, true, points.spaceY, 'P', settings.debug);
                          flag = false;
                      } else {
                          point = addPoint(canvasContent.left + canvasContent.width, canvasContent.top + i * points.spaceY, 0, 0, 0, true, points.spaceY, 'C', settings.debug);
                          flag = true;
                      }
                      points.pointHolder.push(point);
                  } else {
                      if (i === 1) {
                          point = addPoint(canvasContent.left + canvasContent.width, canvasContent.top + (i - 1) * points.spaceY, 0, 0, 0, false, 0, 'P', settings.debug);
                      } else if (i === settings.pointCountY) {
                          point = addPoint(canvasContent.left + canvasContent.width, canvasContent.top + (i + 1) * points.spaceY, 0, 0, 0, false, 0, 'P', settings.debug);
                      }
                      points.pointHolder.push(point);
                  }
              }

              // ---
              //bottom
              flag = true;
              for (i = settings.pointCountX - 1, l = -1; i > l; i--) {
                  if (settings.movementBottom) {
                      if (flag) {
                          point = addPoint(canvasContent.left + i * points.spaceX, canvasContent.top + canvasContent.height, 0, 0, 0, true, points.spaceX, 'P', settings.debug);
                          flag = false;
                      } else {
                          point = addPoint(canvasContent.left + i * points.spaceX, canvasContent.top + canvasContent.height, 0, 0, 0, true, points.spaceX, 'C', settings.debug);
                          flag = true;
                      }
                      if (i === 0 || i === settings.pointCountX - 1) {
                          point.color = '#00FF00';
                          point.movement = false;
                      }
                      points.pointHolder.push(point);
                  } else {
                      if (i === 0 || i === settings.pointCountX - 1) {
                          point = addPoint(canvasContent.left + i * points.spaceX, canvasContent.top + canvasContent.height, 0, 0, 0, false, 0, 'P', settings.debug);
                      }
                      points.pointHolder.push(point);
                  }
              }

              // ---
              //left
              flag = false;
              for (i = settings.pointCountY, l = -1; i > l; i--) {
                  if (settings.movementLeft) {
                      if (flag) {
                          point = addPoint(canvasContent.left, canvasContent.top + i * points.spaceY, 0, 0, 0, true, points.spaceY, 'P', settings.debug);
                          flag = false;
                      } else {
                          point = addPoint(canvasContent.left, canvasContent.top + i * points.spaceY, 0, 0, 0, true, points.spaceY, 'C', settings.debug);
                          flag = true;
                      }
                      points.pointHolder.push(point);
                  } else {
                      if (i === 0) {
                          point = addPoint(canvasContent.left, canvasContent.top + i * points.spaceY, 0, 0, 0, false, 0, 'P', settings.debug);
                      } else if (i === settings.pointCountY) {
                          point = addPoint(canvasContent.left, canvasContent.top + (i + 1) * points.spaceY, 0, 0, 0, false, 0, 'P', settings.debug);
                      }
                      points.pointHolder.push(point);
                  }
              }
          }

          // ---
          function addPoint(x, y, xp, yp, distance, movement, radius, type, visible) {
              var point = {};
              point.x = x;
              point.y = y;
              point.xp = x;
              point.yp = y;
              point.sx = 0;
              point.sy = 0;
              point.distance = distance;
              point.movement = movement;
              point.radius = radius;
              point.type = type;
              point.visible = visible;
              return point;
          };

          // ---
          window.requestAnimFrame = (function() {
              return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function(callback) {
                  window.setTimeout(callback, 1000 / 60);
              };
          })();

          function animloop() {
              requestAnimFrame(animloop);
              render();
              if (settings.autoResize) {
                  resize();
              }
          };

          // ---
          function render() {
              ctx.clearRect(0, 0, settings.canvasWidth, settings.canvasHeight);

              // ---
              var windowPoints = points.pointHolder;
              var i,
                  l;

              // ---
              ctx.beginPath();
              ctx.moveTo(windowPoints[0].x, windowPoints[0].y);
              for (i = 1, l = windowPoints.length; i < l; i += 2) {
                  var point = windowPoints[i];

                  // ---
                  var dx = mousePos.x - point.xp;
                  var dy = mousePos.y - point.yp;
                  point.distance = Math.sqrt(dx * dx + dy * dy);
                  if (point.distance < point.radius) {
                      if (settings.moveTypeIn === 'wobble') {
                          point.sx = point.sx * settings.wobbleFactor + (mousePos.x - point.x) * settings.wobbleSpeed;
                          point.sy = point.sy * settings.wobbleFactor + (mousePos.y - point.y) * settings.wobbleSpeed;
                          point.x = point.x + point.sx;
                          point.y = point.y + point.sy;
                      } else if (settings.moveTypeIn === 'move') {
                          point.x -= (point.x - mousePos.x) / settings.moveSpeed;
                          point.y -= (point.y - mousePos.y) / settings.moveSpeed;
                      }
                  } else {
                      if (settings.moveTypeOut === 'wobble') {
                          point.sx = point.sx * settings.wobbleFactor + (point.xp - point.x) * settings.wobbleSpeed;
                          point.sy = point.sy * settings.wobbleFactor + (point.yp - point.y) * settings.wobbleSpeed;
                          point.x = point.x + point.sx;
                          point.y = point.y + point.sy;
                      } else if (settings.moveTypeOut === 'move') {
                          point.x -= (point.x - point.xp) / settings.moveSpeed;
                          point.y -= (point.y - point.yp) / settings.moveSpeed;
                      }
                  }

                  // ---
                  var pointBefor = windowPoints[i - 1];
                  var pointAfter = windowPoints[i + 1];
                  if (i > 2 && i < windowPoints.length - 2) {
                      if (pointBefor.movement) {
                          pointBefor.x = (windowPoints[i - 2].x + point.x) / 2;
                          pointBefor.y = (windowPoints[i - 2].y + point.y) / 2;
                      }
                      if (pointAfter.movement) {
                          pointAfter.x = (windowPoints[i + 2].x + point.x) / 2;
                          pointAfter.y = (windowPoints[i + 2].y + point.y) / 2;
                      }
                  }
                  ctx.quadraticCurveTo(point.x, point.y, pointAfter.x, pointAfter.y);
              }

              // ---
              if (settings.lineColor.length > 0) {
                  ctx.lineWidth = settings.lineWidth;
                  ctx.strokeStyle = settings.lineColor;
                  ctx.stroke();
              }
              if (settings.bodyColor.length > 0) {
                  ctx.fillStyle = settings.bodyColor;
                  ctx.fill();
              }
              // ctx.globalCompositeOperation = 'source-out';
              // ctx.fillStyle = "rgba(0, 0, 0, 1)";
              // ctx.fill();

              // ---
              if (settings.debug) {
                  for (i = 0, l = windowPoints.length; i < l; i++) {
                      var point = windowPoints[i];
                      if (point.visible) {
                          if (point.type === 'P') {
                              drawCircle(point.x, point.y, 3, '#FF0000');
                          } else {
                              drawCircle(point.x, point.y, 6, '#FF00FF');
                          }
                          if (point.color) {
                              drawCircle(point.x, point.y, 12, point.color);
                          }
                      }
                  }
                  ctx.strokeStyle = '#000000';
                  ctx.strokeRect(0, 0, settings.canvasWidth, settings.canvasHeight);
              }
          };

          // ---
          function delayFlag() {
              resizeCanvas();
              addWindow();
              isResizing = false;
          };

          function resize() {
              if (!isResizing) {
                  if (canvasContent.elementWidth !== object.offsetWidth || canvasContent.elementHeight !== object.offsetHeight) {
                      // -----------
                      isResizing = true;
                      canvasContent.elementWidth = object.offsetWidth;
                      canvasContent.elementHeight = object.offsetHeight;
                      // 防止闪白
                      delayId = window.setTimeout(delayFlag, 10);
                  }
              }
          };

          // ---
          function drawCircle(x, y, radius, color) {
              ctx.beginPath();
              ctx.arc(x, y, radius, 0, 2 * Math.PI);
              ctx.strokeStyle = color;
              ctx.stroke();
          };

          // ---
          function mouseMoveHandler(event) {
              mousePos = getMousePos(canvas, event);
          };

          function mouseLeaveHandler(event) {
              mousePos.x = -10000;
              mousePos.y = -10000;
          };

          // ---
          function getMousePos(canvas, event) {
              var rect = canvas.getBoundingClientRect();
              return {
                  x: event.clientX - rect.left,
                  y: event.clientY - rect.top
              };
          };

          // ---
          init();
      };


  var settings = {
        radius: 20,
        wobbleFactor: 0.98,
        wobbleSpeed: 0.05,
        moveSpeed: 3,
        lineWidth: 3,
        lineColor: '#000',
        bodyColor: '#EEE'

  };
/*
  var footers=document.querySelectorAll(".footer");
  wobbleWindow(footers[footers.length-1],{
                radius: 20,
                depth:-2,
                movementBottom: false,
                movementLeft: false,
                movementRight: false,
                debug: false
  });*/

  var postblocks=document.querySelectorAll(".main-inner .post-block ");
  [].forEach.call(postblocks, function(elm) {
      wobbleWindow(elm,settings);
  });

  

});

</script>


<!-- 页面背景图片动态加载 -->
<script>

     //获取指定长度的uuid
     function uuid(len, radix) {
        var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
        var uuid = [], i;
        radix = radix || chars.length;

        if (len) {
          // Compact form
          for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random()*radix];
        } else {
          // rfc4122, version 4 form
          var r;

          // rfc4122 requires these characters
          uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
          uuid[14] = '4';

          // Fill in random data.  At i==19 set the high bits of clock sequence as
          // per rfc4122, sec. 4.1.5
          for (i = 0; i < 36; i++) {
            if (!uuid[i]) {
              r = 0 | Math.random()*16;
              uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
            }
          }
        }

        return uuid.join('');
    }

    function animatechangbgimg(elm,opacityvalue,bgimgurl){
        $(elm).animate(
        　　{opacity:opacityvalue},
        　　"slow",
        　　null,
        　　function(){
               $(elm).css("background-image","url("+bgimgurl+")");
        　　}
        );
    }

    function checktime(time){
        var oldtime = localStorage.getItem("pjax-imgurl-leeze-lastvisitedtime");
        return Math.floor(((new Date).getTime()-oldtime)/1e3) >= time;
    }

    function changbgimgurl(){

          if(checktime(13)){//每次打开新页面，都会触发一个新的调度器，固加入lastvisitedtime校验，确保循环时间
                //var tc = "https://cdn.jsdelivr.net/gh/maplesugarr/blog-assets/imgs/body-bg/body-bg-" + Math.floor(23 * Math.random()) + ".jpg";
                //var bgimgurl = 'https://source.unsplash.com/collection/30327996/2000x1000';
                //var initbgurl = null,newbgurl = "https://cdn.jsdelivr.net/gh/leeze2012/blog-assets/img/body-bg-" + Math.floor(26 * Math.random()) + ".jpg";
                var initbgurl = null,newbgurl = "https://static.xiaosige.com/img/bg/body-bg-" + Math.floor(26 * Math.random()) + ".jpg";
                if(localStorage.hasOwnProperty('pjax-imgurl-leeze')){
                  initbgurl = localStorage.getItem("pjax-imgurl-leeze");
                }else{
                  initbgurl = newbgurl;
                }

                if($("#bg-box1").css('opacity')==="1"){
                      animatechangbgimg("#bg-box1",0,newbgurl);
                      animatechangbgimg("#bg-box2",1,initbgurl);
                }else{
                      animatechangbgimg("#bg-box1",1,initbgurl);
                      animatechangbgimg("#bg-box2",0,newbgurl);
                }

                localStorage.setItem("pjax-imgurl-leeze", newbgurl);
                localStorage.setItem("pjax-imgurl-leeze-lastvisitedtime",(new Date).getTime());
          }

    };

    setInterval(changbgimgurl,15000);

</script>

<!-- 标题文字闪烁效果 -->
<script>

document.getElementsByClassName('site-title')[0].setAttribute('data-splitting','chars');

Splitting();
gsap.set('.char', {
  '--hue': gsap.utils.distribute({
    base: 0,
    amount: 330,
  })
});
gsap.to('.char', {
  '--weight': 700,
  '--saturation': 80,
  ease: 'sine.inOut',
  duration: 0.5,
  stagger: {
    yoyo: true,
    repeat: -1,
    each: 0.15,
  }
}).time(2);
</script>


<script type="text/javascript">
    $(document).ready(function() {
        <!-- 站点作者头像 -->
        if($('.site-author:first').children().first().prop("tagName").toLowerCase() === "img"){
            <!-- 头像站点作者头像连接到关于我 -->
            $('.site-author-image').prop('outerHTML', "<a href='/about' title='关于我'>"+$('.site-author-image').prop("outerHTML")+"</a>");
            <!-- 站点作者头像动画阴影 -->
            $(".site-author-image").hover(function(){
                $(this).toggleClass('site-author-image-yy');
            },function(){
                $(this).toggleClass('site-author-image-yy');
            });
        }
        <!-- 五星好评 -->
        if($("#wpac-rating").length > 0){
            $("#wpac-rating").before("<div style='color: rgba(0, 0, 0, 0.75); font-size:13px; letter-spacing:3px'>(&gt; 看完记得五星好评哦亲 &lt;)</div>");
            $(".wp_rating").css("height","30px");
        }
        if($(".copyright").length > 0){
            <!-- footer追加邮箱 -->
            if($(".leezeEmail").length === 0){
                $(".copyright").append("<span class='leezeEmail post-meta-item'><i style='margin-right:6px;' class='fa fa-fw fa-envelope with-love'></i><a href='mailto:leeze0216@163.com' title='E-Mail → mailto:leeze0216@163.com' target='_blank'>leeze0216@163.com</a></span>");
            }
            <!-- 版权图标 -->
            $(".copyright span[class='with-love']").css("display","none");
        }
        <!-- footer的阅读次数位置调整 -->
        if($(".busuanzi-count").length > 0){
            $(".wordcount").append($(".busuanzi-count").html());
            $(".busuanzi-count").remove();
        }
        <!-- 标签页追加抖动样式 -->
        if($('.tag-cloud-tags a').length > 0){
            $('.tag-cloud-tags a').each(function(){
              $(this).addClass('shake shake-slow');
            });
        }
        <!-- 社交链接增加hover样式 -->
        if($('.links-of-author-item a').length > 0){
            $('.links-of-author-item a').each(function(index,element){
                if((index+1)%2 === 1){
                    $(this).addClass('hvr-bounce-to-right');
                }else{
                    $(this).addClass('hvr-bounce-to-left');
                }
                if($(this).children('i').length > 0){
                    $(this).children('i').addClass('faa-spin');
                }
            });
        }
        <!-- 主菜单hover样式 -->
        if($('.main-menu .menu-item a').length > 0){
            $('.main-menu .menu-item a').each(function(index,element){
                $(this).addClass('hvr-grow-shadow');
                if($(this).children('i').length > 0){
                    $(this).children('i').addClass('faa-wrench');
                }
            });
        }
        <!-- 移动端 隐藏音乐 -->
        if (/(iPhone|iPad|iPod|iOS|Android)/i.test(navigator.userAgent)) {
            $('meting-js').css('display','none');
        }

        <!-- 转载 -->
        if($('.zhuanzai').length > 0){
            $('.zhuanzai').each(function(index,element){
                $(this).hover(function(){
                    var tipmsg = this.getAttribute('href');
                    if( tipmsg === 'javascript:;'){
                        tipmsg = "抱歉，忘记转载地址了！";
                    }
                    layer.tips(tipmsg, $(this), {
                      tips: 3
                    });
                },function(){
                    layer.closeAll('tips');
                });
            });
        }

    });
</script>
<!-- 自定义 -->
<script src="/zone/js/leeze.js"></script>
<div class="moon-menu">
  <div class="moon-menu-items">
    
    <div id="moon-menu-item-back2bottom" class="moon-menu-item" onclick="back2bottom()">
      <i class='fa fa-chevron-down'></i>    </div>
    
    <div id="moon-menu-item-back2top" class="moon-menu-item" onclick="back2top()">
      <i class='fa fa-chevron-up'></i>    </div>
    
  </div>
  <div class="moon-menu-button">
    <svg class="moon-menu-bg">
      <circle class="moon-menu-cricle" cx="50%" cy="50%" r="44%"></circle>
      <circle class="moon-menu-border" cx="50%" cy="50%" r="48%"></circle>
    </svg>
    <div class="moon-menu-content">
      <div class="moon-menu-icon"><i class='fas fa-ellipsis-v'></i></div>
      <div class="moon-menu-text"></div>
    </div>
  </div>
</div><script src="/js/injector.js"></script><!-- hexo-inject:begin --><!-- hexo-inject:end -->
</body>
</html>
